導入
「各要素を加工した新しいリスト」を作る場面はとても多く、Python には内包表記という短く書ける書き方があります。
説明
[式 for 変数 in リスト] で、各要素を加工した新しいリストを作れます。「元のリストの各要素を、式で変換して、新しいリストに詰め直す」動きです。
flowchart LR src["[1, 2, 3, 4, 5]"] -->|"各要素を n*n に変換"| dst["[1, 4, 9, 16, 25]"]
まずは for で書いた形と比べましょう。
# for で書くと…
squares = []
for n in range(1, 6):
squares.append(n * n)
print(squares) # [1, 4, 9, 16, 25]
# 内包表記なら1行
squares = [n * n for n in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]
if を付けると、条件に合う要素だけを残せます。
evens = [n for n in range(1, 11) if n % 2 == 0]
print(evens) # [2, 4, 6, 8, 10]
words = ["Apple", "Banana", "Cherry"]
lower = [w.lower() for w in words]
print(lower) # ['apple', 'banana', 'cherry']
慣れると読みやすく、Python らしいコードになります。
やってみよう
range() の範囲や 式 の部分を変えて、できるリストがどう変わるか確かめましょう。
演習
内包表記で、1 から 5 までの各数を3倍したリストを作って表示してください(結果は [3, 6, 9, 12, 15])。
ヒント1を見る
[n * 3 for n in range(1, 6)]。