基本的なシーケンス型のうちのひとつがリスト(list)で、とても重要です。
リストを使いこなせなければ要素を管理することはできません。
リストはミュータブルで、変更可能なデータ構造です。要素の挿入や削除などを行うことができます。
[]またはlist()でリストを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
>>> empty_list = [] >>> empty_list [] >>> type(empty_list) <class 'list'> >>> empty_list2 = list() >>> empty_list2 [] >>> type(empty_list2) <class 'list'> >>> sample_list = ['first','second','third'] >>> sample_list ['first','second','third'] >>> print(sample_list) ['first','second','third'] |
他のデータ型をリスト型へ変換
1 2 3 4 5 6 7 8 9 10 |
>>> list('python') #文字列をリストへ ['p', 'y', 't', 'h', 'o', 'n'] >>> sample_tuple = ('first','second','third') #タプルをリストへ >>> list(sample_tuple) ['first', 'second', 'third'] >>> today = '2018/2/28' >>> today.split('/') #split()で分割しリストへ ['2018', '2', '28'] |
要素の取り出し。オフセットを利用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
>>> sample_list = ['first', 'second', 'third'] >>> sample_list[0] 'first' >>> sample_list[1] 'second' >>> sample_list[2] 'third' >>> sample_list[-1] 'third' >>> sample_list[-2] 'second' >>> sample_list[-3] 'first' >>> sample_list[5] #sample_listに5番目はないので、例外発生 Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range |
リストのリスト
1 2 3 4 5 6 7 8 9 10 11 |
>>> sample_list = ['first', 'second', 'third'] >>> sample_list2 = [1, 2, 3] >>> super_list = [sample_list, sample_list2] >>> super_list[0] ['first', 'second', 'third'] >>> super_list[1] [1, 2, 3] >>> sample_list3 = [1,'second',3] #リストの中身の型は同一でなくてよい >>> sample_list3 [1, 'second', 3] |
オフセットで要素を書き換え
1 2 3 4 |
>>> animals = ['dog', 'cat', 'elephant'] >>> animals[1] = 'bird' >>> animals ['dog', 'bird', 'elephant'] |
リストのスライス
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>>> word = ['p', 'y', 't', 'h', 'o', 'n'] >>> word[0:3] ['p', 'y', 't'] >>> word[::2] ['p', 't', 'o'] >>> word[::-2] ['n', 'h', 'y'] >>> word[::-1] #リストの要素が逆順になる ['n', 'o', 'h', 't', 'y', 'p'] |
リストの末尾への要素追加
1 2 3 4 |
>>> word = ['p', 'y', 't', 'h', 'o', 'n'] >>> word.append('3') >>> word ['p', 'y', 't', 'h', 'o', 'n', '3'] |
リストどうしをひとつに結合する
1 2 3 4 5 6 7 8 9 10 11 12 |
>>> word1 = ['p', 'y', 't', 'h', 'o', 'n'] >>> word2 = ['c', 'a', 'r', 'n', 'i', 'v', 'a', 'l'] >>> word1.extend(word2) >>> word1 ['p', 'y', 't', 'h', 'o', 'n', 'c', 'a', 'r', 'n', 'i', 'v', 'a', 'l'] >>> word1 = ['p', 'y', 't', 'h', 'o', 'n'] >>> word2 = ['c', 'a', 'r', 'n', 'i', 'v', 'a', 'l'] >>> word1 += word2 >>> word1 ['p', 'y', 't', 'h', 'o', 'n', 'c', 'a', 'r', 'n', 'i', 'v', 'a', 'l'] |
オフセットを利用した要素の追加
1 2 3 4 |
>>> animals = ['dog', 'cat', 'elephant'] >>> animals.insert(1, 'bird') >>> animals ['dog', 'bird', 'cat', 'elephant'] |
オフセットを利用した要素の削除
1 2 3 4 |
>>> animals = ['dog', 'cat', 'elephant'] >>> del animals[1] >>> animals ['dog', 'elephant'] |
値を指定してリストの要素削除
1 2 3 4 |
>>> animals = ['dog', 'cat', 'elephant'] >>> animals.remove('elephant') >>> animals ['dog', 'cat'] |
オフセットを指定して要素取り出し、削除
1 2 3 4 5 6 7 8 9 10 11 12 |
>>> animals = ['dog', 'cat', 'elephant'] >>> animals.pop() 'elephant' >>> animals ['dog', 'cat'] >>> animals.pop(1) 'cat' >>> animals ['dog'] |
要素の値を指定してオフセットを知る
1 2 3 |
>>> animals = ['dog', 'cat', 'elephant'] >>> animals.index('elephant') 2 |
inで要素の確認
1 2 3 4 5 |
>>> animals = ['dog', 'cat', 'elephant'] >>> 'cat' in animals True >>> 'bird' in animals False |
リストの値の個数を計算
1 2 3 4 5 6 7 8 9 10 |
>>> animals = ['dog', 'cat', 'elephant'] >>> animals ['dog', 'cat', 'elephant'] >>> animals.count('dog') 1 >>> animals.append('dog') >>> animals ['dog', 'cat', 'elephant', 'dog'] >>> animals.count('dog') 2 |
リストの要素を文字列へ変換
1 2 3 4 5 6 7 |
>>> animals = ['dog', 'cat', 'elephant'] >>> ''.join(animals) 'dogcatelephant' >>> ', '.join(animals) 'dog, cat, elephant' >>> ': '.join(animals) 'dog: cat: elephant' |
リスト要素の並び替え
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> animals = ['dog', 'cat', 'elephant'] >>> sorted_animals = sorted(animals) >>> sorted_animals ['cat', 'dog', 'elephant'] >>> animals ['dog', 'cat', 'elephant'] >>> animals.sort() >>> animals ['cat', 'dog', 'elephant'] >>> animals.sort(reverse=True) #降順になる >>> animals ['elephant', 'dog', 'cat'] |
リスト要素を逆順にする
1 2 3 4 5 6 7 |
>>> xlist = ['x', 'y', 'z'] >>> for v in reversed(xlist): ... print(v) ... z y x |
リストの要素の数を取得
1 2 3 |
>>> animals = ['dog', 'cat', 'elephant'] >>> len(animals) 3 |
リストから重複を取り除く
1 2 3 4 |
>>> animals = ['cat', 'dog', 'cat', 'dog'] >>> cdlist = list(set(animals)) >>> cdlist ['dog', 'cat'] # 1度集合にしているため順不同になることに注意 |
=による代入。copy()によるコピー
=による代入とcopy()によるコピーの違いは重要です。
同じリストを作りたいと思った時に、両者の違いをはっきりと認識しておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
>>> animals = ['dog', 'cat', 'elephant'] >>> animals ['dog', 'cat', 'elephant'] >>> animals2 = animals >>> animals[0] = 'bird' >>> animals ['bird', 'cat', 'elephant'] >>> animals2 #animalsと同じリストを参照 ['bird', 'cat', 'elephant'] >>> animals2[1] = 'turtle' >>> animals2 ['bird', 'turtle', 'elephant'] >>> animals #animals2を編集したらanimalsにも反映 ['bird', 'turtle', 'elephant'] |
aのリストとは別の新しいリストをつくる。
手法は3つ。
・copy()
・list()
・[:]
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>>> a = [1, 2, 3] >>> b = a.copy() >>> c = list(a) >>> d = a[:] >>> a[0] = 4 >>> a [4, 2, 3] >>> b [1, 2, 3] >>> c [1, 2, 3] >>> d [1, 2, 3] |
リストの各要素に同じメソッドを適用する
リストの内包表記を利用できる
1 2 3 4 |
>>> oldlist = [1, 2, 3] >>> newlist = [x * 2 for x in oldlist] # 各要素を2倍する >>> newlist [2, 4, 6] |