配列(リスト)に対する操作
Pythonの配列(リスト)やその他のイテラブルに対して行える一般的な操作を一覧でまとめました。
pythonの基本はこちら↓
配列(リスト)に対する基本操作
リストの作成
my_list = [1, 2, 3, 4]
要素の追加
append(): リストの末尾に要素を追加
my_list.append(5) # [1, 2, 3, 4, 5]
insert(): 指定した位置に要素を挿入
my_list.insert(1, 6) # [1, 6, 2, 3, 4, 5]
# insert(挿入場所, 挿入するデータ)
extend(): リストの最後に他のリストの要素を追加
another_list = [7, 8]
my_list.extend(another_list) # [1, 6, 2, 3, 4, 5, 7, 8]
要素の削除
remove(): 指定した値を持つ最初の要素を削除
my_list.remove(6) # [1, 2, 3, 4, 5, 7, 8]
pop(): 指定したインデックスの要素を削除して返す(引数がなければ末尾の要素)
my_list.pop(2) # 2番目の要素の3を削除して返す -> [1, 2, 4, 5, 7, 8]
clear(): リストのすべての要素を削除
my_list.clear() # []
リストの要素にアクセス
インデックスでアクセス
first_element = my_list[0] # 1
スライスで部分リストにアクセス
sub_list = my_list[1:3] # [2, 4]
# 今回だと、1番目から2番目(3番目は含まない)の要素を取り出すということなので、[2, 4]という結果となる。
sub_list = my_list[1:-1] # [2, 4, 5, 7]
「-」をつけると後ろから1番目ということになるので、[1:6]と同じ意味となる。(この際も6番目は含まない)
リストの長さを取得
length = len(my_list) # 6
リストのソート
sort(): リストを昇順にソート
my_list.sort() # [1, 2, 4, 5, 7, 8]
reverse(): リストの要素を逆順にする
my_list.reverse() # [8, 7, 5, 4, 2, 1]
要素の検索
index(): 指定した値のインデックスを取得
index_of_4 = my_list.index(2) # 4
count(): 指定した値の出現回数を取得
count_of_1 = my_list.count(1) # 1
リストのコピー
copy(): リストの浅いコピーを作成
my_copy = my_list.copy() # my_copy = [8, 7, 5, 4, 2, 1]
高度な操作
リスト内包表記
リストを使った簡潔な繰り返し処理
squares = [x**2 for x in range(5)] # [0, 1, 4, 9, 16]
# x**2 は xを2乗するという意味
map()関数
関数を適用して新しいリストを作成
my_list = [8, 7, 5, 4, 2, 1] # 再掲
doubled = list(map(lambda x: x * 2, my_list)) # [16, 14, 10, 8, 4, 2]
# lambdaは簡単に関数を定義する方法で、今回の場合、 x を引数にして、x * 2 を返すような関数を意味する
# list() でlistに変換している
filter()関数
条件を満たす要素だけを抽出
evens = list(filter(lambda x: x % 2 == 0, my_list)) # [8, 4, 2]
zip()関数
複数のリストを同時にループ処理
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped = list(zip(list1, list2)) # [(1, 'a'), (2, 'b'), (3, 'c')]
リストの要素を結合して文字列にする
joined_str = ', '.join(map(str, my_list)) # "8, 7, 5, 4, 2, 1"
段階を踏んで実行すると以下の通りです。
my_list = [8, 7, 5, 4, 2, 1]
mapped_list = map(str, my_list)
# mapped_list は ['8', '7', '5', '4', '2', '1'] という文字列リストを生成するイテレータ
joined_str = ', '.join(mapped_list)
# joined_str は "8, 7, 5, 4, 2, 1" という文字列になります。
enumerate()関数
インデックスと要素を同時に取得
具体的には各要素に対して (インデックス, 要素) というタプルを生成
for i, value in enumerate(my_list):
print(f"Index: {i}, Value: {value}")
all()とany()
all(): リストのすべての要素がTrueかどうかをチェック
all_positive = all(x > 0 for x in my_list) # True
any(): リストのどれか一つがTrueかどうかをチェック
any_negative = any(x < 0 for x in my_list) # False
リストの平坦化
二次元リストを一次元リストに変換
nested_list = [[1, 2], [3, 4], [5, 6]]
flat_list = [item for sublist in nested_list for item in sublist]
# flat_list = [1, 2, 3, 4, 5, 6]
段階を踏んで考えると以下の通りです。
1. for sublist in nested_list: nested_listの各サブリスト([1, 2], [3, 4], [5, 6])を順に取り出します。この部分でnested_listの中の各リストを順にループします。
2. for item in sublist: そのサブリスト(sublist)内の各要素を順に取り出します。この部分で、sublistの中の各要素をループします。
3. item: この部分が実際にリストに追加される要素です。この例では、itemはsublist内の各要素なので、すべてのitemが一次元リストに追加されます。
in演算子
リストに特定の要素が含まれているかを確認
exists = 4 in my_list # True
イテレータ関連の操作
イテレータの基本概念
イテラブル(Iterable): 繰り返し処理が可能なオブジェクトのことです。リスト、タプル、文字列、辞書、セットなどはすべてイテラブルです。イテラブルは、forループや他のイテレーション文脈で使うことができます。
イテレータ(Iterator): イテラブルオブジェクトを基に作成され、next()メソッドを使って、要素を一つずつ取り出せるオブジェクトです。イテレータは内部的に現在の位置を記憶し、次にどの要素を返すべきかを管理します。
iter()とnext()
iter()でリストからイテレータを作成し、next()で次の要素を取得
my_list = [8, 7, 5, 4, 2, 1] # 再掲
my_iter = iter(my_list)
print(next(my_iter)) # 8
print(next(my_iter)) # 7