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
2.3k
リストやタプルの使い方 / Python List
プログラミング基礎同演習
kaityo256
PRO
October 25, 2022
Tweet
Share
More Decks by kaityo256
See All by kaityo256
モンテカルロ法(3) 発展的アルゴリズム / Simulation 04
kaityo256
PRO
8
1.4k
UMAPをざっくりと理解 / Overview of UMAP
kaityo256
PRO
5
2.4k
SSH公開鍵認証による接続 / Connecting with SSH Public Key Authentication
kaityo256
PRO
6
550
論文紹介のやり方 / How to review
kaityo256
PRO
16
85k
デバッグの話 / Debugging for Beginners
kaityo256
PRO
13
1.6k
ビット演算の話 / Let's play with bit operations
kaityo256
PRO
8
590
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
15
5.4k
制限ボルツマンマシンの話 / Introduction of RBM
kaityo256
PRO
3
1.3k
論文の読み方 / How to survey
kaityo256
PRO
224
180k
Other Decks in Education
See All in Education
サンキッズゾーン 春日井駅前 ご案内
sanyohomes
0
850
今までのやり方でやってみよう!?~今までのやり方でやってみよう!?~
kanamitsu
0
140
2025年度春学期 統計学 第12回 分布の平均を推測する ー 区間推定 (2025. 6. 26)
akiraasano
PRO
0
150
万博非公式マップとFOSS4G
barsaka2
0
1k
Online Privacy
takahitosakamoto
0
100
生成AIとの上手な付き合い方【公開版】/ How to Get Along Well with Generative AI (Public Version)
handlename
0
610
(2025) L'origami, mieux que la règle et le compas
mansuy
0
130
CHARMS-HP-Banner
weltraumreisende
0
640
みんなのコード 2024年度活動報告書/ 2025年度活動計画書
codeforeveryone
0
270
EVOLUCIÓN DE LAS NEUROCIENCIAS EN LOS CONTEXTOS ORGANIZACIONALES
jvpcubias
0
130
実務プログラム
takenawa
0
15k
Pythonパッケージ管理 [uv] 完全入門
mickey_kubo
23
23k
Featured
See All Featured
Designing for humans not robots
tammielis
253
25k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Unsuck your backbone
ammeep
671
58k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
185
54k
Embracing the Ebb and Flow
colly
87
4.8k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Building Adaptive Systems
keathley
43
2.7k
Being A Developer After 40
akosma
90
590k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
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