ページ一覧

ページ内

List

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

データ構造はこんな感じ。要素として許されるのは、数字だけじゃなくて、str でも List でもOKです。あとから、要素の追加削除もできます。

[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}')

enumerate() は、list の各要素に対して、「要素が何番目かという情報」と「要素自身」を組 (tuple) にして、数え上げてくれます(iterator)。 tuplelist みたいなものですが、list として実体化されているわけではありません。tuplelist にしたければ、関数list() で変換できます。

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_square, lst))  # map 関数
print(result3)

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

map(func, list) は、list の各要素に対して、関数funcを実行した結果を 順次作成してくれる関数です。 ある意味、結果の list みたいなものを返す関数ですが、 実際に各要素の結果を求めて list として実体化するわけではありません。そういう手続きを返すだけ。 list にしたければ関数 list() で実体化してあげましょう。

あと、lambda はその場で関数を定義する機能で、lambda n: n*n は、以下で定義される関数を表します。

def func(n):
    return n*n

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']

list の同一性

二つの list の要素が、並びも含めて一致していれば、同一になります。

a = [1, 2]
b = [2, 2]
print(f'a==b: {a == b} for a: {a} and b: {b}')
# a==b: False for a: [1, 2] and b: [2, 2]
a[0] = 2
print(f'a==b: {a == b} for a: {a} and b: {b}')
# a==b: True for a: [2, 2] and b: [2, 2]

ソート

要素に自然な大小関係がつく場合は、sort() 関数でソートできます。 通常は昇順にソートしますが、オプション引数というので、reverse=True を指定すると、逆順になります。ソート順を任意に指定することもできますが、まあ、そのあたりはサンプル例でも見てください。

target = [i * (i + 1) * ((-1) ** i) for i in range(6)]
print(target)  # [0, -2, 6, -12, 20, -30]
target.sort()  # 通常は昇順にソート
print(target)  # [-30, -12, -2, 0, 6, 20]
target.sort(reverse=True)  # `reverse=True` で降順にソート
print(target)  # [20, 6, 0, -2, -12, -30]