この記事では
「pythonの内包表記」をわかりやすくご紹介します!
内包表記は非常に便利な記法なので、ぜひ使いこなしていきましょう!
またpythonとpythonの勉強法は
こちらで詳しく紹介しているので、ぜひご参考ください!
リスト(list)の内包表記
まずは内包表記を最も使用するリストを使って
「内包表記とは何か」「どんな特徴があるのか」についてご紹介します!
リストについては、こちらをご参考ください!
内包表記とは何か
最初は「内包表記とは何か」です。
内包表記とは一言でいえば

どうゆうこと?
# 空のリストを定義
sample_list = []
# 0~4までの値をリストに追加
for x in range(5):
sample_list.append(x)
# [0, 1, 2, 3, 4] と出力
print(sample_list)
上記の場合、リストを定義して要素を代入するのに3行使っています。
for文については、こちらをご参考ください!
内包表記を使うと
この3行をたった1行で 以下のように 書くことが出来ます。
# 内包表記を使ってリストを生成
sample_list = [x for x in range(5)]
# '[0, 1, 2, 3, 4]'と出力
print(sample_list)

めっちゃシンプル!
内包表記の書き方は、比較すればわかるように
(リスト) = [(要素) (for文)]
# 通常
sample_list = []
for x in range(5):
sample_list.append(x)
# 内包表記
sample_list = [x for x in range(5)]
内包表記の特徴
次は「内包表記の特徴」です。
内包表記の特徴は以下の2つです。
- 見た目がシンプル
- 処理速度が速い
実は内包表記は見た目がシンプルなだけではなく
「処理速度が速い」特徴もあります。
そのため競技プログラミングやpaizaなどでもおすすめです!
paizaについては、こちらをご参考ください!
if文を含んだリスト(list)の内包表記
次に「if文を含んだ内包表記」についてご紹介します!
if文については、こちらをご参考ください!
if文を含んだ内包表記
まずは「if文を含んだ内包表記」です。
内包表記はfor文だけでなく、if文を組み合わせることもできます。
偶数のみのリストを作るとします。
# 空のリストを定義
sample_list = []
# 0~4までの偶数をリストに追加
for x in range(5):
# 2で割り切れる場合
if x % 2 == 0:
sample_list.append(x)
# [0, 2, 4]と出力
print(sample_list)
上記のコードを内包表記を使うと以下のように書けます。
# 内包表記を使ってリストを生成
sample_list = [x for x in range(5) if x%2 == 0]
# [0, 2, 4]と出力
print(sample_list)
書き方はfor文のみの内包表記の後ろにif文を付け足すだけです!
(リスト)= [(要素) (for文) (if文)]
# 通常
sample_list = []
for x in range(5):
# 2で割り切れる場合
if x % 2 == 0:
sample_list.append(x)
# 内包表記
sample_list = [x for x in range(5) if x%2 == 0]
if else文を含んだ内包表記
次は「if else文を含んだ内包表記」です。
内包表記では、if else文を使った条件分岐も組み合わせることが出来ます。
例として、偶数の時はeven
が代入されているリストを作るとします。
# 空のリストを定義
sample_list = []
# 0~4までの偶数をリストに追加
for x in range(5):
# 2で割り切れる場合
if x % 2 == 0:
sample_list.append("even")
else:
sample_list.append(x)
# ["even", 1, "even", 3, "even"]と出力
print(sample_list)
上記のコードを内包表記を使うと以下のように書けます。
# 内包表記を使ってリストを生成
sample_list = ["even" if x%2 == 0 else x for x in range(5)]
# ["even", 1, "even", 3, "even"]と出力
print(sample_list)
書き方はif文だけの場合とは異なり、if else文をfor文の前に書きます。
(リスト) = [(ifの時の要素) (if else文) (elseの時の要素) (for文)]
# 通常
sample_list = []
for x in range(5):
# 2で割り切れる場合
if x % 2 == 0:
sample_list.append("even")
else:
sample_list.append(x)
# 内包表記
sample_list = ["even" if x%2 == 0 else x for x in range(5)]

だいぶ複雑になってきた・・・
if else文まで含むとかなりコードが複雑になります。
このように内包表記では一見するとシンプルに見えますが
「コードの可読性」が悪くなってしまうという
デメリットもあるので注意しましょう!
辞書(dictionary)の内包表記
最後は「辞書の内包表記」をご紹介します!
辞書については、こちらをご参考ください!
辞書でも使える
まずは「内包表記は辞書でも使える」です。
ここまでリストの内包表記を紹介してきましたが
実は辞書でも内包表記を使うことが出来ます。
例として、値がすべて同じ辞書を以下のように作るとします。
# 空の辞書を定義
sample_dict = {}
# キーのリストを定義
key_list = ["a", "b", "c"]
# 値がすべて1の辞書を生成
for key in key_list:
sample_dict[key] = 1
# {'a':1, 'b':1, 'c':1}と出力
print(sample_dict)
上記のコードを内包表記を使うと以下のように書けます。
# キーのリストを定義
key_list = ["a", "b", "c"]
# 内包表記を使って辞書を生成
sample_dict = {key:1 for key in key_list}
# {'a':1, 'b':1, 'c':1}と出力
print(sample_dict)
書き方はリストの場合とほとんど変わりません。
(辞書)= {(キー):(値) (for文)}
key_list = ["a", "b", "c"]
# 通常
sample_dict = {}
for key in key_list:
sample_dict[key] = 1
# 内包表記
sample_dict = {key:1 for key in key_list}
zip関数を使った辞書の内包表記
次は「zip関数を使った辞書の内包表記」です。
上記で紹介した辞書の内包表記は値がすべて同じ場合でした。

値が違う場合はどうすればいいの??
ではキーだけではなく
値も異なる以下のような場合はどうすればいいでしょうか?
# 空の辞書を定義
sample_dict = {}
# キーのリストを定義
key_list = ["a", "b", "c"]
value_list = [1, 2, 3]
# 値が異なるの辞書を生成
for i in range(3):
key = key_list[i]
value = value_list[i]
sample_dict[key] = value
# {'a':1, 'b':2, 'c':3}と出力
print(sample_dict)
この場合はzip関数を使うことで、内包表記で書くことが出来ます。
# キーのリストを定義
key_list = ["a", "b", "c"]
value_list = [1, 2, 3]
# 値が異なる辞書を生成
sample_dict = {key:value for key, value in zip(key_list, value_list)}
# {'a':1, 'b':2, 'c':3}と出力
print(sample_dict)
書き方はzip関数を使うこと以外は、通常の内包表記と変わりません。
(辞書) = {(キー):(値) (zip関数を使ったfor文)}
key_list = ["a", "b", "c"]
value_list = [1, 2, 3]
# 通常
sample_dict = {}
for i in range(3):
key = key_list[i]
value = value_list[i]
sample_dict[key] = value
# 内包表記
sample_dict = {key:value for key, value in zip(key_list, value_list)}
使用頻度があまり多くありませんが、ぜひ覚えておきましょう!
まとめ
今回はpythonの辞書について
- リスト(list)の内包表記
- if文を含んだリスト(list)の内包表記
- 辞書(dictionary)の内包表記
という流れで紹介しました。
内包表記は様々な場面で使用する非常に便利な記法です!
しっかりと使い方を覚えて、効率的にコードを書いていきましょう!
その他のpythonの基本的な文法は
こちらの記事で紹介しているので、ぜひご参考ください!