[ 最終更新日: 2026-06-22 04:49 閲覧回数: 39回 ]
リスト内包表記
「リストから新たなリストを生成1する簡単な表記方法」だと言われているが、なかなか覚えにくい
構文1
[ 式 for 仮変数 in list ]
具体的には
data = []
[i * 2 for i in range(1,10)]
# 結果は [2, 4, 6, 8, 10, 12, 14, 16, 18]
すなわち range()関数で取り出される 1,2,3,....9 を仮変数 i として、それを2倍にしたリストが表示されたというわけだ。
これを 砕いた for 文で書くと
data = []
for i in range(1,10):
data.append(i * 2)
print(data)
となるはずなので、一行で済むこの表記法は、「簡単だ」ということになる。
構文2
[ 式 for 仮変数 in list 条件式]
例えば
data = (1,2,3,4,5,6,7,8,9,10,11) # 今回はタプルから取り出します。
data1 = sum( [ i for i in data if i > 5 ]) # タプル変数dataから取り出した 6 以上のintを合計します
print(data1)
# 結果は 51
これのわかりにくさは、scritp 言語の一般法則である、上から下に、左から右への順序が変更され、 dataから取り出した変数の要素がそのままi に入るのではなく、仮変数 i に入ってから if 文によってフィルターにかけられ、 最終的にこのフィルタを通過したものだけが一番左側の i に入ることです。すなわち 真ん中 => 右 => 左って移っていくことです。
-
listだけでなく、イテラブルな型であれば良い。 ↩︎