Python: リスト内包表記とは、使い方

リスト内包表記とは、 リストなどのイテラブルなオブジェクトの内容を元に、 新しいリストを作成するための特殊な表記方法です。
リスト内包表記はリスト コンプリヘンション(List comprehension)とも呼ばれ、 英単語の comprehension には「内包」や「包含」といった意味があります。

Pythonの内包表記ではリスト以外にも辞書(ディクショナリ)や集合(セット)が 作成でき、それぞれリスト内包表記、辞書内包表記、集合内包表記と言います (タプルは内包表記がありません)。

ここではリスト内包表記の書式や具体的な書き方を紹介します。

リスト内包表記の書式

書式
[式 for 変数 in イテラブルなオブジェクト (if 条件)]

リストなどのイテラブルなオブジェクトをループさせる場合によく使う 「for 変数 in イテラブルなオブジェクト」という表記の前後に、 「式」や「if 条件」が加わっています。 全体は [] 角括弧で括り、「if 条件」は省略可能です。

リスト内包表記の使い方

では実際にリスト内包表記を使ってみます。

リストの各要素を2倍にした新しいリストを作る

まずはリストを基に、リスト要素を2倍にした新しいリストを作成します。 「if 条件」はありません。

li = [1, 2, 3, 4]

# [式 for 変数 in リスト]
new_li = [v * 2 for v in li] 

print(new_li) # [2, 4, 6, 8]

タプルから新しいリストを作る

タプルもイテラブルなオブジェクトの1つですから、 タプルを基に新しいリストを作成することもできます。

t = (1, 2, 3)

new_li = [v * 2 for v in t]

print(new_li)  # [2, 4, 6]

辞書から新しいリストを作る

辞書(ディクショナリ)を基に、新しいリストを作成します。

d = {"a": 1, "b": 2, "c": 3}

new_li = [v * 2 for v in d.values()]

print(new_li) # [2, 4, 6]

「d.values()」で辞書の値部分を取得できますが、 キー部分を取得したい場合は「d.keys()」を使います。

「if 条件」付きで新しいリストを作る

次は、リストの値が偶数の時だけ2倍にした新しいリストを作成します。 「if 条件」の箇所に「偶数の場合」という条件が加わっています。

結果として「[4, 8]」の新しいリストが作成されます。

li = [1, 2, 3, 4]

# [式 for 変数 in リスト if 条件]
new_li = [n * 2 for n in li if n % 2 == 0]

print(new_li) # [4, 8]

リスト内包表記を使わずに記述する

上で記述したコードを、 リスト内包表記を使わずに記述すると次のようになります。 比較すると内包表記を使った方がシンプルに記述できることがわかります。

li = [1, 2, 3, 4]
new_li = []

for n in li:
	if n % 2 == 0:
		new_li.append(n * 2)

print(new_li) # [4, 8]

リスト内包表記を普段使わない人でも、 他人のコードを読み解く際には必要となってきますので、 リスト内包表記はぜひおさえておいてください。

Python