長期投資シミュレーションツール『Tousimu』をリリースしました!

【超便利!】Pythonの内包表記の使い方をわかりやすく解説!

プログラミング
スポンサーリンク

この記事では

pythonの内包表記」をわかりやすくご紹介します!

内包表記は非常に便利な記法なので、ぜひ使いこなしていきましょう!

またpythonpythonの勉強法

こちらで詳しく紹介しているので、ぜひご参考ください!

スポンサーリンク

リスト(list)の内包表記

まずは内包表記を最も使用するリストを使って

「内包表記とは何か」「どんな特徴があるのか」についてご紹介します!

リストについては、こちらをご参考ください!

内包表記とは何か

最初は「内包表記とは何か」です。

内包表記とは一言でいえば

リスト辞書シンプルに書く方法 」です。

どうゆうこと?

例えば、以下のようにfor文を使ってリストを作るとします。

# 空のリストを定義
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文を回しているようなイメージです。

リストの内包表記

(リスト) = [(要素) (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文を組み合わせることもできます。

例として以下のように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文を付け足すだけです!

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 else文を含んだリストの内包表記

(リスト) = [(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関数を使った辞書の内包表記

(辞書) = {(キー):(値) (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の基本的な文法は

こちらの記事で紹介しているので、ぜひご参考ください!

タイトルとURLをコピーしました