Pythonの内包構文
説明
forループであるオブジェクトを作成する際、ループ自体をオブジェクト内部に記載する形式の文法をコンプリヘンションcomprehensionという。可読性が良い方法であり、Pythonではリスト、集合、辞書のコンプリヘンションをサポートしている。長い説明よりも以下の例を見てみよう。
コード
リスト
平方数のリストを作るための最も基本的な方法は以下の通り。
>>> squares = []
>>> for i in range(1, 7):
... squares.append(i**2)
# [1, 4, 9, 16, 25, 36]
コンプリヘンションとは以下のようにリスト内部にforループを記述することを意味する。
>>> squares = [i**2 for i in range(1, 7)]
# [1, 4, 9, 16, 25, 36]
条件文を追加したり、入れ子のループも可能だ。ただし、このようにループが複雑になると、一般的なループ文法の方が読みやすいこともある。
>>> odd_squares = [i**2 for i in range(1, 7) if i % 2 != 0 ]
# [1, 9, 25]
>>> tuples = [(i, j) for i in range(3) for j in range(2)]
# [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
集合と辞書
集合と辞書にも同様の方法で利用できる。
>>> fruits = {len(word) for word in ["apple", "banana", "pear", "orange"]}
# {4, 5, 6}
>>> word2len = {word: len(word) for word in ["apple", "banana", "pear"]}
# {'apple': 5, 'banana': 6, 'pear': 4}