たまにpythonで書く時に“こうしたいんだけどどう書くんだっけ”となるので, 自分が実際につまずいたことと基本事項をまとめました(随時更新します).
メモ程度の記述なので詳細はググってみてください.
今回はリストです.
リストの操作
リストの初期化
#リストの初期化
list0 = [1, 2, 3, 4, 5] #基本
list1 = [0] * 10 #同じ要素を沢山
list2 = [[1, 2, 3] for i in range(3)] #多次元
[1, 2, 3, 4, 5]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
各要素の型変換
##型変換
list = [1, 2, 3, 4]
print(type(list[0]))
list = [str(i)+"!" for i in list] #型変換
print(list)
print(type(list[0]))
<class 'int'>
['1!', '2!', '3!', '4!']
<class 'str'>
要素の追加, 挿入, 連結, 分割
# 要素の追加, 挿入
list=[]
#追加
list.append(1)
list.append(2)
#挿入
list.insert(1, 1.5) #(添え字, 挿入データ)
[1, 2]
[1, 1.5, 2]
リストを連結する際は, extendメソッドもしくは'+'演算子を使う.
#リストの結合
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = [7, 8, 9]
list1.extend(list2)
list1+=list3
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
リストを分割(一部を抽出)する際はスライスを使う
#リストの分割
list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list1 = list[0:3]
list2 = list[3:6]
list3 = list[0:9:2]
[1, 2, 3]
[4, 5, 6]
[1, 3, 5, 7, 9]
インデックスの取得
indexメソッドを使う.
#要素のインデックスの取得
list = [9, 4, 6, 2, 3, 4]
idx1 = list.index(2) #存在しない場合はValueError
idx2 = list.index(4) #重複した要素がある場合, 一番初めが出力
3
1
重複した要素が含まれるリストに対し, すべての要素のインデックスを取得する場合は組み込み関数enumurateを以下のようにして使う.
list = [9, 4, 6, 2, 3, 4]
idx = [x for x, i in enumerate(list) if i == 4]
[1, 5]
要素の削除
要素そのものを指定する場合は.remove, インデックスで指定する場合は.popを使う. 全てを消去する場合は.clearを用いる.
#要素の削除
list = [9, 4, 6, 2, 3, 4]
list.remove(6)
list.pop(2)
list.clear()
[9, 4, 2, 3, 4]
[9, 4, 3, 4]
[]
要素のカウント
#要素のカウント
list = ['OK', 'OK', 'NG', 'OK', 'NG']
c = list.count('OK')
3
ソート
sortメソッドと組み込み関数のsortedがある.
sortはリストの中身を書き換える. 降順にするの場合はreverse=Trueとする.
#要素のソート
list = [5, 3, 8, 6, 4, 1]
list.sort()
list.sort(reverse=True)
[1, 3, 4, 5, 6, 8]
[8, 6, 5, 4, 3, 1]
sortedはソート済みの新しいリストを返す.
list = [5, 3, 8, 6, 4, 1]
list_s = sorted(list)
print(list)
print(list_s)
[5, 3, 8, 6, 4, 1]
[1, 3, 4, 5, 6, 8]
2つのリストの各要素を対応付けてソートする場合(例えば数量を表示するランキング)はzip関数を使って以下のように書く. 動作原理は https://udon.little-pear.net/python_double_sort/ を参照してください.
list_student = ['A', 'B', 'C', 'D']
list_score = [88, 76, 72, 84]
rank = list(zip(*sorted(zip(list_score, list_student), reverse=True)))
[(88, 84, 76, 72), ('A', 'D', 'B', 'C')]
さいごに
リストの基本的な操作について少しまとめました. 他にもいろいろまとめていく予定ですので, よかったらそちらもご覧ください.