チャポケのブログ

勉強したことをまとめておく。

Python 内包表記によるリスト生成

内包表記によるリスト生成

list型配列の生成方法として、次の内包表記がある。

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

イテラブルオブジェクトとは、リストやタプルなどのデータ配列のこと。
イテラブルオブジェクトの各要素を変数名で取り出して、
その変数名の変数を使った評価式の演算結果をまとめたものとして
list型配列が生成されて、それが変数に代入される。
具体例:

aaa = [2**i for i in range(10)]
print(aaa)
# [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

上記の内包表記を用いたリストの生成と、下記のforループを用いたものは同じになる。

aaa = []
for i in range(10):
    aaa.append(2**i)
print(aaa)
# [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

if文を用いた内包表記

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

イテラブルオブジェクトの各要素を変数名で取り出して、
条件式=真」となった変数名の変数だけを使った評価式の演算結果をまとめたものとして
list型配列が生成されて、それが変数に代入される。
具体例:

aaa = [2**i for i in range(10) if i%2 == 0]
print(aaa)
# [1, 4, 16, 64, 256]

上記の内包表記を用いたリストの生成と、下記のforループを用いたものは同じになる。

aaa = []
for i in range(10):
    if i%2 == 0:
        aaa.append(2**i)
print(aaa)
# [1, 4, 16, 64, 256]

内包表記に、三項演算子を組合せる方法

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

上記の評価式に、三項演算子を用いる。

変数 = [真での評価式 if 条件式 else 偽での評価式 for 変数名 in イテラブルオブジェクト]

具体例:

aaa = [2**i if i%2 == 0 else i for i in range(10)]
print(aaa)
# [1, 1, 4, 3, 16, 5, 64, 7, 256, 9]

上記の内包表記を用いたリストの生成と、下記のforループを用いたものは同じになる。

aaa = []
for i in range(10):
    if i%2 == 0:
        aaa.append(2**i)
    else:
        aaa.append(i)
print(aaa)
# [1, 1, 4, 3, 16, 5, 64, 7, 256, 9]

複数のforを使った内包表記

内包表記では、次のように2つ以上のforを使うこともできる。

aaa = [(x,10*y) for x in [1,2,3] for y in [1,2,3] if x!=y]
print(aaa)
# [(1, 20), (1, 30), (2, 10), (2, 30), (3, 10), (3, 20)]