Python

Python基礎講座(10 内包表記)

More than 3 years have passed since last update.

内包表記

内包表記を使用するとリスト、セット、ディクショナリのデータ操作を短い行数で記述できます。
また処理速度も早くなるので、膨大な要素を持つ場合はこちらを使いましょう。

リスト内包表記

まずは以下のリスト内包表記を使用したプログラムを実行してください。

list_comprehension1.py
result = [x**2 for x in [1, 2, 3, 4, 5]]
print("{0}".format(result))

x**2は「xの2乗」を意味し、リストresultには以下の値が格納されます。

[1, 4, 9, 16, 25]

リスト内包表記を使用しない場合、上のプログラムは以下のように置き換えることが出来ます。

list_comprehension2.py
result = []
for i in [1, 2, 3, 4, 5]:
    result.append(i**2)
print("{0}".format(result))

[ 要素に入れる値(変数を使用) for 変数 in リスト ]

リストはプログラムのようにリスト型のデータを使用することも可能ですし、 range(1,6)のようにrange()も使用可能です。

リスト内包表記は、リストの要素内で処理する要素、処理しない要素を条件指定することができます。

list_comprehension3.py
print("{0}".format( [x*10+1 for x in range(1,6) if x > 2 and x < 5]))

出力結果は以下になります。

[31, 41]

リスト内包表記はリストを返すので、print文に直接リスト内包表記を与えることも当然可能です。
リスト内包表記を使用しない場合、上のプログラムは以下のように置き換えることが出来ます。

list_comprehension4.py
result = []
for x in range(1,6):
    if x > 2 and x < 5:
        result.append(x*10+1)
print("{0}".format(result))

[ 要素に入れる値(変数を使用) for 変数 in リスト 条件 ]

セット内包表記

内包表記はセットでも使用可能です。使用方法はリスト内包表記と同じです。

set_comprehension.py
print("{0}".format( {x*10+1 for x in range(1,6) if x > 2 and x < 5}))

出力結果は以下になります。
set([41, 31])

ディクショナリ(辞書)内包表記

キーと値を:で区切り、キー:バリューと{}で括るのは通常のディクショナリと同じです。
使用方法はリストと同じです。

dictionary_comprehension.py
print("{0}".format( {str(x):x**2 for x in range(1,6)}))

内包表記を使用しなくても同じ処理を行うことが出来ますが、シンプルで高速動作を実現できる
内包表記を意識して使用すると良いソースコードが出来上がります。

次: Python基礎講座(11 例外)