空のリストの生成
空の場合は添字でアクセスできない。
1 2 3 4 |
lst = [] print(len(lst)) # 0 print(lst) # [] print(lst[0]) # Error: list index out of range |
要素が1個のリストの生成
1 2 3 4 |
lst = [2] print(len(lst)) # 1 print(lst) # [1] print(lst[0]) # 2 |
要素が複数個のリストの生成
最も一般的な、要素をリテラルで指定したリスト。
1 2 3 4 |
lst = [1, 2] print(len(lst)) # 2 print(lst) # [1, 2] print(lst[0], lst[1]) # 1 2 |
終わりに”,”をつけても同じ。
1 2 |
lst = [1, 2,] print(lst) # [1, 2] |
要素がない場合はエラー。
1 |
lst = [,] # Error: invalid syntax |
多次元のリスト
多次元配列のように定義可能。後ろの方の添字が入れ子の内側のリストの添字。
1 2 |
lst = [[0, 1, 2], [3, 4, 5], [6, 7, 8]] print(lst[0][1], lst[2][1]) # 1 7 |
異なる要素を持つリスト
異なるタイプの要素を持つことができる。
1 2 3 4 5 6 |
lst = [1, 'two', [3, 'four']] print(len(lst)) # 3 print(lst[1]) # two print(lst[2]) # [3, 'four'] print(lst[1][0]) # t print(lst[2][1]) # four |
繰り返し指定
*演算子
*演算子で繰り返し数を指定。要素の掛け算ではなく、リストの掛け算のように書く。
1 2 3 4 |
lst1 = [0]*3 lst2 = [1, 2]*3 print(lst1) # [0, 0, 0] print(lst2) # [1, 2, 1, 2, 1, 2] |
これは+演算子によるリストの結合だと考えるとよい。
1 2 |
lst = [0] + [0] + [0] print(lst) # [0, 0, 0] |
内包表記
要素が固定の場合。
1 2 |
lst = [0 for n in range(3)] print(lst) # [0, 0, 0] |
要素を変化させる場合。
1 2 |
lst = [n*2 for n in range(3)] print(lst) [0, 2, 4] |
*演算子を使う場合の注意点
*演算子は、同一インスタンスへの参照を複製するだけなので、意図した結果にならない場合がある。
1 2 3 4 |
lst = [[0]*2]*3 print(lst) # [[0, 0], [0, 0], [0, 0]] lst[0][0] = 1 print(lst) # [[1, 0], [1, 0], [1, 0]] |
[0, 0]が3つ複製されるが、これらは同じインスタンスを指すため、一つの要素の変更が他にも反映されてしまう。
内包表記なら毎回インスタンスが生成されるので、意図した結果になる。
1 2 3 4 |
lst = [[0]*2 for n in range(3)] print(lst) # [[0, 0], [0, 0], [0, 0]] lst[0][0] = 1 print(lst) # [[1, 0], [0, 0], [0, 0]] |