基本的なシーケンス型のうちのひとつがリスト(list)で、とても重要です。
リストを使いこなせなければ要素を管理することはできません。
リストはミュータブルで、変更可能なデータ構造です。要素の挿入や削除などを行うことができます。
[]またはlist()でリストを作成
>>> 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']
他のデータ型をリスト型へ変換
>>> 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']
要素の取り出し。オフセットを利用
>>> 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
リストのリスト
>>> 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]
オフセットで要素を書き換え
>>> animals = ['dog', 'cat', 'elephant'] >>> animals[1] = 'bird' >>> animals ['dog', 'bird', 'elephant']
リストのスライス
>>> 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']
リストの末尾への要素追加
>>> word = ['p', 'y', 't', 'h', 'o', 'n'] >>> word.append('3') >>> word ['p', 'y', 't', 'h', 'o', 'n', '3']
リストどうしをひとつに結合する
>>> 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']
オフセットを利用した要素の追加
>>> animals = ['dog', 'cat', 'elephant'] >>> animals.insert(1, 'bird') >>> animals ['dog', 'bird', 'cat', 'elephant']
オフセットを利用した要素の削除
>>> animals = ['dog', 'cat', 'elephant'] >>> del animals[1] >>> animals ['dog', 'elephant']
値を指定してリストの要素削除
>>> animals = ['dog', 'cat', 'elephant'] >>> animals.remove('elephant') >>> animals ['dog', 'cat']
オフセットを指定して要素取り出し、削除
>>> animals = ['dog', 'cat', 'elephant'] >>> animals.pop() 'elephant' >>> animals ['dog', 'cat'] >>> animals.pop(1) 'cat' >>> animals ['dog']
要素の値を指定してオフセットを知る
>>> animals = ['dog', 'cat', 'elephant'] >>> animals.index('elephant') 2
inで要素の確認
>>> animals = ['dog', 'cat', 'elephant'] >>> 'cat' in animals True >>> 'bird' in animals False
リストの値の個数を計算
>>> animals = ['dog', 'cat', 'elephant'] >>> animals ['dog', 'cat', 'elephant'] >>> animals.count('dog') 1 >>> animals.append('dog') >>> animals ['dog', 'cat', 'elephant', 'dog'] >>> animals.count('dog') 2
リストの要素を文字列へ変換
>>> animals = ['dog', 'cat', 'elephant'] >>> ''.join(animals) 'dogcatelephant' >>> ', '.join(animals) 'dog, cat, elephant' >>> ': '.join(animals) 'dog: cat: elephant'
リスト要素の並び替え
>>> 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']
リスト要素を逆順にする
>>> xlist = ['x', 'y', 'z'] >>> for v in reversed(xlist): ... print(v) ... z y x
リストの要素の数を取得
>>> animals = ['dog', 'cat', 'elephant'] >>> len(animals) 3
リストから重複を取り除く
>>> animals = ['cat', 'dog', 'cat', 'dog'] >>> cdlist = list(set(animals)) >>> cdlist ['dog', 'cat'] # 1度集合にしているため順不同になることに注意
=による代入。copy()によるコピー
=による代入とcopy()によるコピーの違いは重要です。
同じリストを作りたいと思った時に、両者の違いをはっきりと認識しておきましょう。
>>> 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()
・[:]
>>> 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]
リストの各要素に同じメソッドを適用する
リストの内包表記を利用できる
>>> oldlist = [1, 2, 3] >>> newlist = [x * 2 for x in oldlist] # 各要素を2倍する >>> newlist [2, 4, 6]