Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
リストやタプルの使い方 / Python List
Search
kaityo256
PRO
October 25, 2022
Education
0
2k
リストやタプルの使い方 / Python List
プログラミング基礎同演習
kaityo256
PRO
October 25, 2022
Tweet
Share
More Decks by kaityo256
See All by kaityo256
デバッグの話 / Debugging for Beginners
kaityo256
PRO
9
930
ビット演算の話 / Let's play with bit operations
kaityo256
PRO
4
240
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
15
4.9k
制限ボルツマンマシンの話 / Introduction of RBM
kaityo256
PRO
3
830
論文の読み方 / How to survey
kaityo256
PRO
220
160k
リンゴゲームと貧富の差 / Origin of the disparity of wealth
kaityo256
PRO
14
14k
渡辺研Slackの使い方 / Slack Local Rule
kaityo256
PRO
9
8.5k
時間の矢について / Time's arrow
kaityo256
PRO
12
17k
t-SNEをざっくりと理解 / Overview of t-SNE
kaityo256
PRO
2
1.3k
Other Decks in Education
See All in Education
Web Architectures - Lecture 2 - Web Technologies (1019888BNR)
signer
PRO
0
2.7k
SQL初級中級_トレーニング【株式会社ニジボックス】
nbkouhou
0
20k
Semantic Web and Web 3.0 - Lecture 9 - Web Technologies (1019888BNR)
signer
PRO
1
2.5k
HCI and Interaction Design - Lecture 2 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
820
情報処理工学問題集 /infoeng_practices
kfujita
0
120
Canva
matleenalaakso
0
430
Image Processing 1 : 1.Introduction
hachama
0
280
XML and Related Technologies - Lecture 7 - Web Technologies (1019888BNR)
signer
PRO
0
2.5k
ヘイトスピーチがある世界のコミュニケーション
ktanishima
0
140
CompTIA Security+ SY0-601 Resumo
mariliarochas
2
2.6k
Os pápeis do UX Design
wagnerbeethoven
0
370
Qualtricsで相互作用実験する「SMARTRIQS」入門編
kscscr
0
320
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Statistics for Hackers
jakevdp
796
220k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Scaling GitHub
holman
458
140k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
YesSQL, Process and Tooling at Scale
rocio
169
14k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
The Language of Interfaces
destraynor
154
24k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Transcript
1 30 リストやタプルの使い方 プログラミング基礎同演習 慶應義塾大学理工学部物理情報工学科 渡辺
2 30 リストとタプル 値のコピーとリストのコピー 参照の値渡し
3 30 複数の値をまとめて管理するデータ構造 角かっこで囲み、カンマで区切る [値1, 値2, 値3]
4 30 なんでもリストにできる [1, 2, 3] 整数のリスト ["A", "B", "C"]
文字列のリスト 異なる種類のデータを混ぜることができる ["A", 1, 1.0] 文字列と整数と浮動小数のリスト
5 30 a = [1, 2, 3] リストを変数に代入できる lenで長さを取得できる len(a)
[1, 2] + [3, 4, 5] リストは結合できる [1, 2, 3, 4, 5]
6 30 a = [1, 2, 3] リスト名[番号]で要素にアクセスできる a[1] 2
a[0] = 5 リストの要素を書き換えることができる a = [5, 2, 3] 括弧の中の数字をインデックスと呼ぶ (0スタートなのに注意)
7 30 複数の値をまとめて管理するデータ構造 カンマで区切る 値1, 値2, 値3 (値1, 値2, 値3)
丸括弧で囲んでも良い
8 30 一度作られたタプルは修正できない a = 1, 2, 3 a[1] =
4 TypeError: 'tuple' object does not support item assignment タプルのアイテムに代入はできません その他はリストと同様に使える print(a[1]) インデックスを使って要素にアクセスできる len(a) lenを使って長さが取れる
9 30 関数で複数の値を返したいとき によく使われる def func(): return 1, 2 a,
b = func() a, b = 1, 2 複数の変数を一度に初期化する a, b = b, a 変数の値を入れ替える
10 30 3 1 2 a = [1, 2, 3]
0番地 1番地 2番地 3番地 4番地 5番地 メモリ上にリストが作成される 3 0番地を見よ 1 2 その先頭位置を指すラベルを作成する a このような情報の保持の仕方を「参照」と呼ぶ
11 30 3 0番地を見よ 1 2 a リストの先頭から二番目の場所を探す a[1] =
4 3 0番地を見よ 1 4 a 該当箇所を書き換える
12 30 10 0番地 1番地 2番地 a a = 10
10 10 a b b = a ラベルaの指す内容がbにコピーされる 10 20 a b b = 20 その後bを書き換えてもaは影響を受けない メモリ上に「10」を表現する場所が作られ、 そこにaというラベルを貼る
13 30 3 0番地を見よ 0番地を見よ 1 2 a b =
a aの指す内容がコピーされる b b[1] = 4 3 0番地を見よ 0番地を見よ 1 4 a b bを通じてリストを修正する a[1] # => 4 3 0番地を見よ 0番地を見よ 1 4 a b この時、aの指す先も書き換わっている (同じリストを共有しているから)
14 30 aとbは同じリストを指す a = [1, 2, 3] b =
a 3 0番地を見よ 0番地を見よ 1 2 a b b = [4, 5, 6] 3 0番地を見よ 5番地を見よ 4 1 2 a b 5 6 bにリストを代入 メモリ上に[4, 5, 6]が作られ、 bはそこを指す aとbは別のリストになる
15 30 1 a 1 1 a 関数内のa def func(a):
a = 2 a = 1 func(a) 1 2 a 関数内のa aの値がコピーされて渡されてくる 関数内のaが修正されても 元のaは影響を受けない グローバル変数aが 作られる 関数内のローカル 変数aが作られる ローカル変数の値 が更新される このような情報の渡し方を「値渡し」と呼ぶ
16 30 3 0番地を見よ 0番地を見よ 1 2 a aの指す内容がコピーされる func:a
3 0番地を見よ 0番地を見よ 1 4 a func:a ローカル変数を通じてリストを修正 (グローバル変数の指すリストも書き 換わる) def func(a): a[1] = 4 a = [1,2,3] func(a) このような情報の渡し方を「参照の値渡し」と呼ぶ ※ 「参照の値渡し」も「値渡し」の一種
17 30 def func(a): a = [4,5,6] a = [1,2,3]
func(a) 3 0番地を見よ 0番地を見よ 1 2 a func:a 3 0番地を見よ 5番地を見よ 4 1 2 a func:a 5 6 (1) リストが関数の引数として渡されている (2) ローカル変数に新しいリストを代入 (1) この時点では同じものを指している (2) ローカル変数が別のリストを指す 以後、グローバル変数は影響を受けない
18 30 意図しない動作(バグ)の元になるから 参照の値渡しの仕組みを知らないと・・・ 関数の引数としてリストを渡して、内部で修正したら関数の外も影響を受けた 「リストを渡したら関数の中と外で同じものを指す」と理解してしまう 関数内で新しいリストを代入したら、外のリストは影響を受けなくなる 理解不能
19 30 ・変数のコピーは値のコピー ・リストを指す変数は参照を保存している ・関数の引数はローカル変数 ・引数には値がコピーして渡される(値渡し) ・参照もコピーして渡される(参照の値渡し)
20 30 [新しいリストの要素 for 元のリストの要素 in 元のリスト] リスト内包表記は「後ろから」読む [2*i for
i in source] (1) (2) (3) (1) sourceというリストに含まれる(in source) (2) それぞれの要素 i について(for i) (3) 2*iを要素とするような新しいリストを作ってください
21 30 あるリストの要素をすべて二倍したい source = [0, 1, 2] result =
[2*i for i in source] 「元のリスト」に直接リストを突っ込んでも良い result = [2*i for i in [0, 1, 2]] rangeを使うこともできる result = [2*i for i in range(3)] ※ リスト内包表記は「Pythonらしい」書き方だが、使いすぎに注意
22 30 直線を三等分する 中央を正三角形の形に盛り上げる 全ての直線を三等分する それぞれ中央を盛り上げる 以下、全ての直線について上記の操作を繰り返す
23 30 入力ベクトル 出力ベクトル 変換ベクトルリスト 長さをスケールする 傾いた入力には 傾いた出力 入力ベクトルを、支点と終点を一致させつつ変換ベクトルリストで変換する
24 30 ベクトルの長さを計算する関数lengthの実装 a = [(1,0),(0,1)] (1, 0) (0, 1)
length(a) (1, 0) (0, 1) 2 1.41421356... が出力されるはず
25 30 ベクトル一つを変換ベクトルリストで変換する関数 convertの実装 変換ベクトルリスト a = (0, 1) b
= [(1, 1), (1, -1)] convert(a, b) [(-0.5, 0.5), (0.5, 0.5)]
26 30 変換ベクトルリスト a = [(1,0),(0,-1)] b = [(1, 1),
(1, -1)] apply(a, b) [ (0.5, 0.5), (0.5, -0.5), (0.5, -0.5) ,(-0.5, -0.5) ]
27 30 変換ベクトルリスト a = [(size, 0)] b = [(1,
0), (0.5, sqrt(3.0)/2), (0.5, -sqrt(3.0)/2), (1, 0)] 入力 出力
28 30 変換リストbに好きなベクトル列を入れて、オリジナルのコッホ曲線を作れ 渡辺が作ってみたコッホ曲線
29 30 関数 draw_line_colorは、与えられた色を順番につかって色付きの線を描画する 色の与え方 色は(R, G, B)のタプルのリスト それぞれ輝度が0から255まで 赤
緑 c = [(255,0,0),(0,255,0),(0,0,255)] 青 色は何色与えても良い(リストの長さは自由)
30 30