Python

【Python】内包表記の種類と使い方を解説

この記事では、Pythonの内包表記の使い方を解説します。内包表記を使うことで、単純なリストを低コストで生成することができます。また、同じ表記方法でジェネレータ式も使うことができます。それでは、内包表記の使い方を見ていきましょう!

リスト内包表記

リスト内包表記は、以下のように記述します。

[式 for 変数名 in イテラブルオブジェクト]

イテラブルオブジェクトの要素が1つずつ変数に渡され、式が繰り返し処理されます。その際、式で評価された結果がリストの要素して返されます。

サンプル

例えば、以下のようなコードを内包表記を使って書き直すと、

nums = []

for i in range(3):
    nums.append(i*2)

print(nums)

実行結果

[0, 2, 4]

以下のようになります。

nums = [i*2 for i in range(3)]
print(nums)

実行結果

[0, 2, 4]

セット内包表記

セット内包表記は、{}を使って以下のように記述します。

{式 for 変数名 in イテラブルオブジェクト}

使い方はリスト内包表記と同じです。

サンプル

リスト内包表記のサンプルをセット内包表記で書き換えみます。

nums = {i*2 for i in range(3)}
print(nums)

実行結果

{0, 2, 4}

ディクショナリ内包表記

ディクショナリ内包表記は、セット内包表記同様{}を使って記述します。異なる点は、式でkey:valueの2つの値を返す必要があります。

{key:value for 変数名 in イテラブルオブジェクト}

サンプル

以下のコードでは、2つのリストから辞書を作成しています。

keys = ['key1', 'key2', 'key3']
values = ['v1', 'v2', 'v3']

d = {k:v for k, v in zip(keys,values)}
print(d)

実行結果

{'key1': 'v1', 'key2': 'v2', 'key3': 'v3'}

条件を指定する

以下のようにifを記述することで、返す要素の条件を指定することができます。

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

条件式がTrueの場合のみ式が評価され、要素が返されます。

リスト内包表記以外にも使用可能です

サンプル

例えば、以下のコードは偶数のみを格納したリストを生成していますが、このコードを内包表記を使って書き直すと、

even = []

for i in range(5):
    if i % 2 == 0:
        even.append(i)

print(even)

実行結果

[0, 2, 4]

以下のようになります。

even = [i for i in range(5) if i % 2 == 0]
print(even)

実行結果

[0, 2, 4]

ネストした内包表記

式の部分にネストした内包表記を記述することができます。それにより、多次元配列を簡単に処理することができます。

[式 for 変数名1 in イテラブルオブジェクト1 for 変数名2 in イテラブルオブジェクト2]

サンプル

例えば、以下のコードは全ての要素を2倍したリストを生成しています。このコードをネストした内包表記で書き直すと、

nums = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

double = []
for row in nums:
    double.append([num*2 for num in row])

print(double)

実行結果

[[2, 4, 6], [8, 10, 12], [14, 16, 18]]

以下のように記述できます。

double = [[num*2 for num in row] for row in nums]
print(double)

実行結果

[[2, 4, 6], [8, 10, 12], [14, 16, 18]]

ジェネレータ式

内包表記に()を使うことでジェネレータ式にすることができます。

(式 for 変数名 in イテラブルオブジェクト)

使い方は内包表記となんら変わりませんが、戻り値がジェネレータオブジェクトになっています。

【Python】ジェネレータの定義と使い方を解説この記事では、Pythonのジェネレータの使い方を解説します。ジェネレータとは、イテレータを簡単に作成するための機能です。リストやタプルなどを使わなくても、複数の値を返す関数を定義することができます。それでは、ジェネレータの使い方を見ていきましょう!...

サンプル

試しに、リスト内包表記と同じサンプルを実行してみます。

gen = (i*2 for i in range(3))
print(gen)

for g in gen:
    print(g)

実行結果

<generator object <genexpr> at 0x7f991491f9e0>
0
2
4

まとめ

この記事では、Pythonの内包表記について解説しました。

内包表記を使うことで低コストでリストや辞書を作成することができます。1行で記述することができるので、さっぱりしたコードを書くことができます。

複雑な処理をしようとすると途端に可読性が落ちるので気をつけましょう!

それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』