Pynote

Python、機械学習、画像処理について

Python - リスト操作 チートシート (頻出パターンまとめ)

概要

Python のリスト操作の頻出パターンをまとめた。

リストを初期化する。

空のリストを作成する。

array = []

値を追加する。

リストの先頭に値を追加する。

array = [1, 2, 3, 4, 5]
array.insert(0, 10)  # array1[0] = 1 なので、その直前に挿入される。

print(array)  # [10, 1, 2, 3, 4, 5]

リストの末尾に値を追加する。

array = [1, 2, 3, 4, 5]
array.append(10)

print(array)  # [1, 2, 3, 4, 5, 10]

リストに値を挿入する。

array = [1, 2, 3, 4, 5]
array.insert(2, 10)  # array1[2] = 3 なので、その直前に挿入される。

print(array)  # [1, 2, 10, 3, 4, 5]

2つのリストを結合する。

array1 = [1, 2, 3]
array2 = [4, 5, 6]
array1.extend(array2)

print(array1)  # [1, 2, 3, 4, 5, 6]

リストから要素を削除する。

削除する要素の値を指定する。

array = [1, 2, 3, 4, 5]
array.remove(2)

print(array)  # [1, 3, 4, 5]

削除する要素のインデックスを指定する。

array = [1, 2, 3, 4, 5]
del array[0]

print(array)  # [2, 3, 4, 5]

削除する要素の範囲をインデックスで指定する。

array = [1, 2, 3, 4, 5]
del array[:2]

print(array)  # [3, 4, 5]

リストから値を取り出す。(POP 操作)

array = [1, 2, 3, 4, 5]
val = array.pop(1)  # array[1] = 2 を取り出す。

print(array, val)  # [1, 3, 4, 5] 2
array = [1, 2, 3, 4, 5]
val = array.pop()  # array[-1] = 5 を取り出す。

print(array, val)  # [1, 2, 3, 4] 5

リストを空にする。

array = [1, 2, 3, 4, 5]
array.clear()

print(array)  # []

リストから指定した値を持つ要素を探す。

リスト全体から探す。

array = [1, 2, 3, 4, 5]

print(array.index(2))  # 1
#print(array.index(8))  # 存在しない場合は ValueError

指定した範囲から探す。

array = [1, 2, 3, 4, 5]

# array[1:5] の範囲で要素3を探す。
print(array.index(3, 1, 5))  # 2

ソートする。

降順ソートする。

array = [3, 2, 4, 5, 1]
array.sort()

print(array)  # [1, 2, 3, 4, 5]

元のリストを変更しないで、降順ソートする。

array1 = [3, 2, 4, 5, 1]
array2 = sorted(array1)

print(array2)  # [1, 2, 3, 4, 5]

昇順ソートする。

array = [3, 2, 4, 5, 1]
array.sort()
array.reverse()

print(array)  # [5, 4, 3, 2, 1]

元のリストを変更しないで、昇順ソートする。

array1 = [1, 2, 3, 4, 5]
array2 = list(reversed(array1))

print(array2)  # [5, 4, 3, 2, 1]

指定した要素の出現回数を数える。

array = [1, 2, 1, 2, 3, 4, 4]
cnt = array.count(2)  # 2の出現回数

print(cnt)  # 2

deep copy する。

array1 = [1, 2, 3, 4, 5]
array2 = array1
array2[1] = 0  # array2 は array 1 の参照なので、変更は array1 にも影響する。

print(array1)  # [1, 0, 3, 4, 5]
array1 = [1, 2, 3, 4, 5]
array2 = array1.copy()  # array2 は array 1 のコピーなので、変更は array1 には影響しない。
array2[1] = 0

print(array1)  # [1, 2, 3, 4, 5]

ループ

逆順にループする。

array = [1, 2, 3, 4, 5]
for v in reversed(array):
    print(v, end=' ')  # 5 4 3 2 1 

インデックスと値を同時にループする。

array = ['a', 'b', 'c', 'd', 'e']
for i, v in enumerate(array):
    print('{}={}'.format(i, v), end=' ')  # 0=a 1=b 2=c 3=d 4=e

zip() と enumerate() を併用する。

array1 = [1, 2, 3, 4, 5]
array2 = ['a', 'b', 'c', 'd', 'e']
for i, (v1, v2) in enumerate(zip(array1, array2)):
    print('{}=({}, {})'.format(i, v1, v2), end=' ')
    # 0=(1, a) 1=(2, b) 2=(3, c) 3=(4, d) 4=(5, e)

リストをスタックとして利用する。

stack = [3, 4, 5]

# push 操作
stack.append(6)
stack.append(7)

# pop 操作
print(stack.pop())  # 7
print(stack.pop())  # 6

内包記法

内包記法

# 内包記法
array = [i for i in range(5)]
print(array)  # [0, 1, 2, 3, 4]

# for で実現する場合
array = []
for i in range(5):
    array.append(i)
print(array)  # [0, 1, 2, 3, 4]

2重の内包記法

# 内包記法
array = [(x, y) for y in range(2) for x in range(3)]
print(array)  # [(0, 0), (1, 0), (2, 0), (0, 1), (1, 1), (2, 1)]

# for で実現する場合
array = []
for y in range(2):
    for x in range(3):
        array.append((x, y))
print(array)  # [(0, 0), (1, 0), (2, 0), (0, 1), (1, 1), (2, 1)]

条件付き内包記法

# 内包記法
array = [i for i in range(5) if i % 2 == 0]
print(array)  # [0, 2, 4]

# for で実現する場合
array = []
for i in range(5):
    if i % 2 == 0:
        array.append(i)
print(array)  # [0, 2, 4]

複数の配列を要素ごとに結合する。

array1 = [1, 2, 3, 4, 5]
array2 = ['a', 'b', 'c', 'd', 'e']

array = list(zip(array1, array2))
print(array)  # [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')]

辞書からリストに変換する。

辞書の各要素のキーをリストに変換する。

辞書の順序は Python 3.6 以降は挿入順であることが保証される。
それ以前のバージョンでは、順序は保証されない。

d = {2: 'b', 1: 'a', 3: 'c'}
array = list(d)
print(array)  # [2, 1, 3]

# より明示的な書き方
array = list(d.keys())
print(array)  # [2, 1, 3]

辞書の各要素の値をリストに変換する。

array = list(d.values())
print(array)  # ['b', 'a', 'c']

辞書の各要素のキー及び値をリストに変換する。

array = list(d.items())
print(array)  # [(2, 'b'), (1, 'a'), (3, 'c')]

タプルからリストに変換する。

t = (1, 2, 3)
array = list(t)
print(array)  # [1, 2, 3]

集合演算を利用したテクニック

2つのリストの片方にしかない値を抽出する。

array1 = [1, 3, 4, 5, 6, 7]
array2 = [2, 3, 4, 6, 6, 7]

# array1 に含まれて array2 には含まれない値一覧
diff = list(set(array1) - set(array2))
print(diff)  # [1, 5]

# array2 に含まれて array1 には含まれない値一覧
diff = list(set(array2) - set(array1))
print(diff)  # [2]

2つのリストを値が重複しないように結合する。

# array1 及び array2 を重複しないように結合する。
array = list(set(array2) | set(array1))
print(array)  # [1, 2, 3, 4, 5, 6, 7]

2つのリストのどちらか一方のみに含まれる値一覧を抽出する。

# array1 または array2 のどちらか一方のみに含まれる値一覧
array = list(set(array2) ^ set(array1))
print(array)  # [1, 2, 5]

リストの重複する値を削除する。

array1 = [1, 1, 2, 3, 4, 4, 5]
array = list(set(array1))
print(array)  # [1, 2, 3, 4, 5]

リストの中に値が存在するかどうか調べる。

指定した値が存在するかどうか調べる。

array = [1, 2, 3, 4, 5]

result1 = 1 in array  # 1 は array に存在するか
print(result1)  # True
result2 = 8 in array  # 8 は array に存在するか
print(result2)  # False

指定した値が存在しないかどうか調べる。

array = [1, 2, 3, 4, 5]

result1 = 1 not in array  # 1 は array に存在しないか
print(result1)  # False
result2 = 8 not in array  # 8 は array に存在しないか
print(result2)  # True