現在Recursionに取り組んでいる。 そこで学んだことをメモする。
リスト(List)
複数のデータをまとめたデータ構造。 各データにはインデックス(index)と呼ばれる番号が割り振られる。 インデックスは先頭から0で始まり、1つ隣に移動するごとにインデックスが1つ増える。
Pythonにおいてリストは動的配列と呼ばれる形式。 なのでリストに含まれるデータ型は統一されている必要はない。
生成
直接要素を指定
myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(myList) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
リスト内包表記
myList = [val for val in range(10)] print(myList) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
文字列をリストに変換
myStr = "hello" myList = list(myStr) print(myList) # ['h', 'e', 'l', 'l', 'o']
任意の値を任意個数要素にもつリストを生成
my_list = [0] * 10 print(my_list) # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
操作
読み取り
特定インデックスの値
myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(myList[5]) # 5
for文を使用して繰り返し処理
myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for val in myList: print(val) # 0 # 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9
後ろから数えた特定インデックスの値
追加
末尾に要素を追加(append)
myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] myList.append(10) print(myList) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
末尾に複数の要素を追加(extend)
myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] myList.extend([10,11]) print(myList) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
特定インデックスに値を追加(insert)
myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # インデックス5に10を追加 myList.insert(5, 10) print(myList) # [0, 1, 2, 3, 4, 10, 5, 6, 7, 8, 9]
特定のインデックスに複数の値を追加(スライスを用いる)
myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # インデックス0に10, 11, 12, 13を追加 myList[0:0] = [10, 11,12,13] print(myList) # [10, 11, 12, 13, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
更新
特定のインデックス範囲の値を更新(スライスを用いる)
myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # インデックス0に10を追加 myList[0:0] = [10, 11,12,13] print(myList) # [10, 11, 12, 13, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
削除
末尾の値を削除(pop)
myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] myList.pop() print(myList) # [0, 1, 2, 3, 4, 5, 6, 7, 8]
特定のインデックスの値を削除(pop)
pop(インデックス)
で指定した値は元のリストから削除され、
戻り値に渡される。
myList = [0,1,2,3,4,5,6,7,8,9] removedVal = myList.pop(5) print(myList) # [0, 1, 2, 3, 4, 6, 7, 8, 9] print(removedVal) # 5
結合
ソート
昇順にソート(sort)
破壊的な変更なので、元のリストの並びが変更される。
myList = [5, 1, 9, 3, 8, 4, 2, 7, 0, 6] myList.sort() print(myList) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
降順にソート(sort(reverse=True))
破壊的な変更なので、元のリストの並びが変更される。
myList = [5, 1, 9, 3, 8, 4, 2, 7, 0, 6] myList.sort(reverse=True) print(myList) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
その他
要素数を数える
myList = [1,1,2,3,4,5,5,5,6] print(myList.count(5)) # 3
条件式の中でリストが空か判定する
if not my_list: print("empty") # my_listが空ならば```not []```は```True```と判定される。