List

List は、各種データを入れる配列のようなものです。 公式チュートリアルの該当部分はこちら

データ構造はこんな感じ。要素は別に数字に限らず、List も含めて、色んな要素が入っても大丈夫です。あとから、要素の追加削除もできます。

[0, 1, 2, 3, 4]

初期化

# 初期化
lst = [0, 1, 2, 3, 4]
print(lst)  # 出力: [0, 1, 2, 3, 4 ]

要素アクセス

# index アクセス
print('lst[2]:', lst[2])  # 出力 lst[2]: 2

追加・サイズ・合計値

# 追加
lst.append(5)  # 5 を追加
print(lst)  # 出力 [0, 1, 2, 3, 4, 5 ]

lst2 = list(range(6, 10))  # 6 から 10 (含まず)の range をリストに
print(lst2)  # 出力 [ 6, 7, 8, 9 ]
lst.extend(lst2)  # lst に lst2 追加
print(lst)  # 出力 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(len(lst), sum(lst)) # サイズと合計値、出力 10 45

index 指定での削除・挿入

# index 削除・挿入
lst.insert(1, 11)  # 1番目の要素として 11 を挿入
print(lst)  # 出力 [0, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9]
lst.pop(1)  # 1番目の要素を削除
print(lst)  # 出力 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

要素の検索・削除

# 検索・削除
# 値 8 が lst に含まれるかどうか 
print('8 in lst:', 8 in lst)  # 出力 8 in lst: True
# 値 8 を検索し index を返す
print('lst.index(8):', lst.index(8))  # 出力 lst.index(8): 8
lst.remove(8)  # lst から値 8 の要素を削除
print(lst)  # 出力 [0, 1, 2, 3, 4, 5, 6, 7, 9]
# 1..9 (9含まず) の範囲で 値 6 を検索
print('lst.index(6, 1, 9):', lst.index(6, 1, 9))  # 出力  lst.index(6, 1, 9): 6

slice(部分リスト)

# slice (部分リスト)
print('lst[3:6]:', lst[3:6])  # 出力 lst[3:6]: [3, 4, 5]
print('[lst[:3]:', lst[:3])  # 出力 [lst[:3]: [0, 1, 2]
print('lst[6:]:', lst[6:])  # 出力 lst[6:]: [6, 7, 9]
print('lst[0:8:2]:', lst[0:8:2])  # 出力 lst[0:10:2]: [0, 2, 4, 6]

list に対する順次アクセス

# list に対する順次アクセス、 for ループ3パターン 
lst = lst[:4]  # [0, 1, 2, 3] に
i = 0
for elem in lst:
    print(f"A: {i} 番目: {elem}")
    i += 1

for i in range(len(lst)):
    print(f"B: {i} 番目: {lst[i]}")

for i, elem in enumerate(lst):
    print(f"C: {i} 番目: {elem}")

list に順次アクセスし、list 作成

いくつか方法を載せておきます。

# list を順番にアクセスし、 list 作成
result = []  # 最初は普通のループ
for elem in lst:
    result.append(elem * elem)
print(result)

result2 = [elem * elem for elem in lst]  # 内包表現
print(result2)

result3 = list(map(my_sqrt, lst))  # map 関数
print(result3)

result4 = list(map(lambda n: n * n, lst))  # map + lambda
print(result4)  # 出力:

2 つ(以上)の list を順番にアクセス

# 2 つ(以上)の list を順番にアクセス
lstA = list(range(4))  # [0, 1, 2, 3]
lstB = list(range(0, 12, 3))  # [0, 3, 6, 9]
print(lstA, lstB)

# lstA: [0, 1, 2, 3] と lstB: [0, 3, 6, 9] の要素を
# 順に a, b に割り当ててloop
for a, b in zip(lstA, lstB):
    print(f"a: {a}, b: {b}")

# 内包表記も可能
lstAB = [f"a: {a}, b: {b}" for a, b in zip(lstA, lstB)]
print(lstAB)  # ['a: 0, b: 0', 'a: 1, b: 3', 'a: 2, b: 6', 'a: 3, b: 9']

Read more