Pythonの内包表記

Pythonには普通のfor文よりもシンプルで便利な内包表記という書き方もあります。

最初は難しく感じるかもしれないですが、マスターすればとても便利!

ということで、今回はfor文とも比較しながら内包表記について解説していきます。

内包表記とは?

リストや辞書などのオブジェクトにループ処理をした結果を新たなリストや辞書に格納する際に利用されます。

内包表記のメリット
  • 1行で書ける
  • 処理が速い

 

リスト内包表記

例:0~4の整数が入ったリストから二乗にしたリストを作る

①for文

square = [ ]
for i in range(5):
    square.append(i * i)
print(square)

 

出力結果

# [0, 1, 4, 9, 16]

 

②内包表記

square = [i * i for i in range(5)]
print(square)

 

出力結果

# [0, 1, 4, 9, 16]

 

for文だと、

①リストを宣言する

②ループを回す

③ループの中でappendする

これだけで3行になってしまいますが、内包表記だと、

ループの中で処理したい式を先に書いて[ ]で 囲うだけで、シンプルです。

 

辞書内包表記

例:2つのリストから県と県庁所在地を紐づける辞書を作る

#県
prefecture = ["神奈川", "愛知", "兵庫"]
#県庁所在地
city = ["横浜", "名古屋", "神戸"]

d = {key : value for key, value in zip(prefecture, city)}
print(d)

 

出力結果

{"神奈川": "横浜",
 "愛知": "名古屋",
 "兵庫": "神戸"}

 

zip関数は複数リストのインデックスを同時に取得するのによく使われます。

 

内包表記とif文の組み合わせ

for文の中でif文が使われることはよくありますが、内包表記とif文も組み合わせて使うことができます。

・if文だけのとき

①for文

half = [ ]
for i in range(10):
    if i % 2 == 0:
        half.append(i)
print(half)

 

出力結果

#[0, 2, 4, 6, 8]

 

②内包表記

half = [i for i in range(10) if i % 2 == 0]
print(half)

 

出力結果

#[0, 2, 4, 6, 8]

 

 

・if-else文のとき

①for文

half = [ ]
for i in range(10):
    if i % 2 == 0:
        half.append(i)
    else:
        half.append("奇数")
print(half)

 

出力結果

# [0, "奇数", 2, "奇数", 4, "奇数", 6, "奇数", 8 ,"奇数"]

 

②内包表記

half = [i if i % 2 == 0 else "奇数" for i in range(10)]
print(half)

 

出力結果

# [0, "奇数", 2, "奇数", 4, "奇数", 6, "奇数", 8 ,"奇数"]

ifだけのときとは書く位置が違います。

 

まとめ

内包表記の基本的な書き方について解説しました。

ぜひマスターして分かりやすいコードが書けるようになりましょう!