リスト
リストの初期化
リストとタプルの表現
[…]でリスト(list)を、(…)でタプル(tuple)を記述する。リストは要素の変更が可能だが、タプルは変更できない。
1 2 3 4 |
lst = [1, 2, 3] tpl = (4, 5, 6) print(lst) # [1, 2, 3] print(tpl) # (4, 5, 6) |
要素を改行して記述可能で、最後の要素のカンマ(,)は付けても付けなくてもよい。
1 2 3 4 5 6 |
a = [ 'one', 'two', 'three', 'four', ] print( a ) # ['one', 'two', 'three', 'four'] |
型の異なる要素を混在させてよい。
1 2 |
lst = [1, 'two', 3] tpl = ('one', 2, 'three') |
要素が一つだけのタプルは、要素の後にカンマ(‘)を付ける必要がある。
1 2 |
print((1)) # 1 => 数値 print((1,)) # (1,) => タプル |
入れ子
リスト、タプルは入れ子にできる。リストの要素にタプルがあってもよく、その逆も可能。
1 2 |
lt = [1, (2, 3), 4] tl = (1, [2, 3], 4) |
リストとタプルの違い
リストの要素は変更できるが、タプルの要素は変更できない。
1 2 3 4 5 |
lst = [1, 2, 3, 4] tpl = (1, 2, 3, 4) lst[0] = 5 # 変更可能 tpl[0] = 5 # TypeError |
ただしタプルの要素がオブジェクトの場合、オブジェクトへの参照が変わらなければ、オブジェクトの内容は変更可能。
1 2 3 4 5 6 7 8 9 |
a = (1, 2, [3, 4], 5) a[2][1] = 0 print(a) # (1, 2, [3, 0], 5) a[2].append(-1) print(a) # (1, 2, [3, 0, -1], 5) a[2] = [0, 1] # TypeError |
相互変換
list()関数でタプルをリストに、tuple()関数でリストをタプルに変換可能。
1 2 |
print(list((1, 2, 3))) # [1, 2, 3] print(tuple([1, 2, 3])) # (1, 2, 3) |
リスト
共通操作
要素の個数
要素数はlen()関数で得られる。
1 |
print(len([1, 2, 3, 4])) # 4 |
要素へのアクセス
インデックスを指定してアクセスできる。最初の要素のインデックスは0となる。
1 2 3 4 5 6 7 8 9 |
a = [1, 2, 3] print(a[0]) print(a[1]) print(a[2]) # 実行結果 # 1 # 2 # 3 |
インデックスに負の数を指定すると、-1を最後尾としてそこから前方へカウントする。
1 2 3 4 5 6 7 8 9 |
t = (1, 2, 3) print(t[-1]) print(t[-2]) print(t[-3]) # 実行結果 # 3 # 2 # 1 |
forによる順次アクセス
forで個々の要素にアクセスできる。
1 2 3 4 5 6 7 8 |
a = [1, 2, 3] for n in a: print(n) # 実行結果 # 1 # 2 # 3 |
結合
リスト同士、タプル同士を結合して、新たなリスト/タプルを生成できる。
1 2 |
print([1, 2, 3] + [4, 5, 6]) # [1, 2, 3, 4, 5, 6] print((1, 2, 3) + (4, 5, 6)) # (1, 2, 3, 4, 5, 6) |
部分列
- [n:m]でn番目からm-1番目の要素を取り出した部分列を返す
- [:m]は先頭からm-1番目まで、[n:]はn番目から最後までの部分列を返す
- [n:m:s]でn番目~m-1番目の要素をs個おきで返す
1 2 3 4 5 |
a = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(a[2:5]) # [3, 4, 5] print(a[:3]) # [1, 2, 3] print(a[5:]) # [6, 7, 8, 9] print(a[1:8:2]) # [2, 4, 6, 8] |
n、mにマイナスの値を指定すると、後ろから数える。-1が最後の要素を差し、そこから前へ遡っていく。ただしmに-1を指定すると、その一つ手前の-2番目の要素までが対象となる。
1 2 3 |
a = [1, 2, 3, 4, 5] print(a[-1]) # 5 print(a[-3:-1]) # [3, 4] |
要素の検索
- in演算子
- 要素がリストに含まれているかどうかを判定。
- index()メソッド
- 指定した要素のインデックスを返す。2番目の引数で検索を開始するインデックスを指定可能。要素が存在しない場合はValueError。
1 2 3 4 5 6 7 |
lst = ['A', 'B', 'C', 'B', 'A'] print('C' in lst) # True print('D' in lst) # False print(lst.index('B')) # 1 print(lst.index('A', 1)) # 4 # print(lst.index('D')) # ValueError print(lst.count('A')) # 2 |
リストのみの操作
以下の操作は要素の変更を伴うので、リストのみ可能。
要素の変更
単独要素の置き換えのほか、部分リストを指定した一括置換が可能。置き換えられるリストと置き換えるリストの長さが違う場合、自動的にリストの長さが変更される。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
lst = ['A', 'B', 'C', 'D'] lst[2] = 'c' print(lst) # 添字2の要素を置き換え # ['A', 'B', 'c', 'D'] lst[:2] = ['a', 'b'] print(lst) # 部分リストの要素で置き換え # ['a', 'b', 'C', 'D'] lst = ['A', 'B', 'C'] lst[1:] = ['b', 'c', 'd'] print(lst) # リストの自動的な拡張 # ['A', 'b', 'c', 'd'] lst = ['A', 'B', 'C', 'D'] lst[:2] = 'b' print(lst) # リストの自動的な縮小 # ['b', 'C', 'D'] |
要素の追加・削除
要素の追加
- append()メソッド
- 引数をリストの要素として追加する。
- insert()メソッド
- インデックスで指定した要素の前に新たな要素を追加する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
lst = [1, 2, 3] lst.append(4) print(lst) # [1, 2, 3, 4] lst = [1, 2, 3] lst.append([4, 5, 6]) print(lst) # [1, 2, 3, [4, 5, 6]] lst = [1, 2, 3] lst.insert(1, 1.5) print(lst) # [1, 1.5, 2, 3] lst = [1, 2, 3] lst.insert(1, [1.5, 1.6]) print(lst) # [1, [1.5, 1.6], 2, 3] |
要素の削除
詳細はこちら
- del文
- 添字を指定してリストの要素を削除する。部分リストを指定して削除することも可能。
- remove()メソッド
- 要素そのものを指定して削除する。同じ値の要素が複数存在する場合、最初の要素を削除する。
- pop()メソッド
- 指定した位置の要素を取り出して削除する。先頭要素はゼロ番目、位置指定を省略した場合は最後尾。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
lst = [1, 2, 3, 4, 5] del lst[2] # [1, 2, 4, 5] print(lst) del lst[1:3] print(lst) # [1, 5] lst = ['A', 'B', 'C', 'B', 'A'] lst.remove('B') print(lst) # ['A', 'C', 'B', 'A'] lst = [1, 2, 3, 4] elm = lst.pop() print(elm, lst) # [1, 2, 3] lst = [1, 2, 3, 4] elm = lst.pop(2) print(elm, lst) # [1, 2, 4] |
リストの拡張
extend()メソッドにより、リストに他のリストの要素を展開して追加できる。
1 2 3 4 5 6 7 |
lst = [1, 2, 3] lst.extend([4, 5, 6]) print(lst) # [1, 2, 3, 4, 5, 6] lst = [1, 2, 3] lst.extend([[4, 5], [6, 7]]) print(lst) # [1, 2, 3, [4, 5], [6, 7]] |
内包表記
内包表記を参照。