【Python】内包表記について

(※以下は2018年1月7日時点の情報です。)

このページでは『Pythonの内包表記』について解説します。

リスト内包表記

リスト内包表記の使い方

リスト内包表記のフォーマットを以下に示します。

リスト内包表記
[式 for 要素名 in リスト]

次にリスト内包表記の実行例を示します。
上はx(0〜4)の2乗をリストの各要素に設定する内包表記、下はx(0〜4)のx乗をリストの各要素に設定する内包表記です。

リスト内包表記の例1
[x * x for x in range(5)]
[0, 1, 4, 9, 16]

[x ** x for x in range(5)]
[1, 1, 4, 27, 256]

また、内側のリストも内包表記にすることができます。
x・xの2乗・xの3乗を要素とするリストを、xが0〜4の範囲で要素とするリスト(すなわち多次元配列)とする内包表記です。

リスト内包表記の例2
[[x, x ** 2, x ** 3] for x in range(5)]
[[0, 0, 0], [1, 1, 1], [2, 4, 8], [3, 9, 27], [4, 16, 64]]

リスト内包表記に条件式を追加する

リスト内包表記は条件式を追加することができます。
これによりfilter関数のような振る舞いをさせることも可能です。

リスト内包表記のフォーマットを以下に示します。

条件式を追加したリスト内包表記
[式 for 要素名 in リスト if 条件式]

リスト内包表記に条件式を追加した実行例です。
0〜9までの値のうち、偶数の値のみを要素とするリストを作ることができます。

条件式を追加したリスト内包表記の例
[x for x in range(10) if x % 2 == 0]
[0, 2, 4, 6, 8]

上記のリスト内包表記をラムダ関数で実装するとこのようになります。
リスト内包表記のほうがシンプルに書けますね。

リスト内包表記をラムダ関数を使って実装した例
list(filter(lambda x : x % 2 == 0, range(10)))
[0, 2, 4, 6, 8]