Pythonの内包表記とは【サンプルコードで解説】

Pythonの内包表記とは【サンプルコードで解説】Python
ゆうすけ
ゆうすけ

Pythonの内包表記がよく分かりません。

資格マフィア
資格マフィア

内包表記はルールさえ分かれば簡単だ。コード付きで解説しよう。

 

✔️ 本記事のテーマ

Pythonの内包表記について


✔️ 読者さんへの前置きメッセージ

 

本記事は「Pythonの内包表記」について書いています。

 

この記事を読むことで
「内包表記の記述ルール や リスト内包表記のPythonでの書き方」
を理解できます。

 

Pythonを使っていると、内包表記について学ぶことがあるかと思います。

 

内包表記はあくまで記法の一つなので、必ず使わないといけないものではありません。

 

しかし、Pythonの世界ではメジャーな書き方なので目にすることが多いでしょう。

 

特に、チーム開発をしていると、内包表記を使って書かれたコードを読むことがあるでしょう。

 

そのため、Pythonをマスターするのであれば、内包表記について知識を持っておくべきです。

 

それでは、Pythonの内包表記について解説していきましょう。

 

Pythonの内包表記とは?

Pythonの内包表記とは?

内包表記とは、Pythonの独自の記法です。

 

内包表記を使うことでイテレータを新しく定義する時に、
シンプルなコードで書くことができます。

 

実際にコードを使って説明しましょう。

 

例えば、0~9までの累乗を格納したリストは以下のように書くことができます。

 

number_list = []
for i in range(10)
number_list.append(i*i)

 

これを内包表記を用いて、書いてみましょう。

 

number_list = [i*i for i in range(10)]

 

だいぶスッキリと書くことができますね。

 

当然ですが、上の二つのコードでやっていることは全く同じです。

 

これだけだと何をしているかが分かりにくいかもしれませんが、
内包表記はルールさえ分かればとても簡単です。

 

内包表記は以下のルールで書かれています。

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

 

これだけです。

 

つまりサンプルコードでは、
[i*I for I in range(10)]
の部分でループを10周回して、
各ループの中でI * I という式の結果をリストに格納していたのです。

 

このように簡潔なコードで、やりたいことを実現する方法が内包表記です。

 

次から、いろいろな内包表記について、コード付きで解説していきましょう。

 

リスト内包表記(Pythonコード)

リスト内包表記(Pythonコード)

内包表記の中では、これが最もよくみる形かもしれません。

 

やっていることは単純で、for文でループを回しながら、
ループ内の処理結果をリストに追加します。

 

書き方のルールは以下の通りです。

sample_list = [処理 for 変数 in リスト]

コードで解説すると、分かりやすいです。

 

以下のような、小文字が格納されたリストを基に、大文字のリストを作るとします。

 

lower = ['a', 'b', 'c', 'd', 'e']

 

通常であればこのようにリストを定義した後に、
for文を書いて処理結果をリストに追加していきます。

 

upper = []
for i in lower:
    upper.append(i.upper)

 

リスト内包表記を使うと以下のように書くことができます。

 

upper = [ i.upper for i in lower]

 

かなりシンプルになりましたね。

 

リスト内包表記は、慣れないうちは処理内容が分かりにくいかもしれません。

 

ただ、使っているうちに慣れるので、敬遠せずに積極的に使っていくことが第一歩です。

 

辞書内包表記(Pythonコード)

辞書内包表記(Pythonコード)

内包表記はリストだけではなく、辞書でも使うことができます。

 

辞書内包表記のルールは以下の通りです。

{キー:値 for 変数 in イテレータ}

リスト内包表記とあまり変わりませんね。

 

ただ、内包表記をあまり知らずに、
他人のコードを読んでいる時に辞書内包表記に遭遇すると、
処理内容がなかなか分かりにくいです。

 

ここで慣れておきましょう。

 

コードで解説します。

 

例えば、「キーが数字、値がその数字の累乗」となる辞書を定義します。

 

sample_dict = {}
for i in range(1, 10)
    sample_dict['i'] = i * i

 

これを辞書内包表記で書くと以下のようになります。

 

sample_dict = {i: i * i for i in range(1, 10)}

 

for文を使って書いた時と比べて少し違いますが、
内包表記慣れるとこちらの方が自然に感じます。

 

If文を使った内包表記(Pythonコード)

If文を使った内包表記(Pythonコード)

応用編として、ifでの分岐を使ったリスト内包表記を解説します。

 

内包表記でのif文は、一番後ろに記載します。

 

[処理 for 変数 in イテレータ if 条件式]

 

例えば、偶数のみのリストを作るとします。

 

sample_list = []
for i in range(1, 10):
    if i%2 ==0:
        sample_list.append(i)

 

これをリスト内包表記で書くと、以下のようになります。

 

[ i for i in range(1, 10) if i%2 == 0]

 

If文が入ると、内包表記を使用かするかどうかで、コードの簡潔さが大きく変わりますね。

 

Lambdaを使った内包表記(Pythonコード)

Lamdaを使った内包表記(Pythonコード)

ここからはさらに応用編です。

 

Pythonにはlambda式という記法があります。

 

一言でいうと、無名関数で処理を定義することですね。

 

なお、Lambdaについては
PythonのLambda式とは【サンプルコード付き】」の記事で詳しく解説しています。

 

これをリスト内包表記と合わせて使うこともできます。

 

例えば、

  1. 数字を10倍するlambda関数を作る
  2. 数字のリストに対して、その関数をかけて、新たなリストを作る

という処理をコードで書くとします。

 

before_list = [1, 2, 3, 4, 5]

after_list = list(map(lambda x: x*10, before_list))

 

これを内包表記 + lambda で書くと以下のようになります。

 

before_list = [1, 2, 3, 4, 5]

after_list = [x*10 for x in before_list]

 

もともとのコードもlambdaを使っているので、コード量としてはあまり差がないです。

 

ただ、内包表記の方がシンプルで分かりやすい記述になっています。

 

可読性をあげる意味でも内包表記は便利な記法です。

 

自分がチームで開発するとき or チームメンバーが書いたコードを保守するときに、
戸惑わないように知識としては抑えておきましょう。

 

Pythonにおける内包表記とは?

 Pythonプログラミングにおいて内包表記は必須のスキルではありません。

 

内包表記にこだわらなくとも、リストとfor文がかければ処理を書くことは出来ますからね。

 

ただ、1ランク上のエンジニアになるためには必要なスキルです。

 

チーム開発をするときや保守性の高いコードを書くという点において、
「オブジェクト指向を理解していること」や「適切に関数化できること」は欠かせません。

 

内包表記も同じようなスキルです。

 

より綺麗で保守性の高いコードを書くために必要なスキルなんです。

 

Pythonエンジニアとしてより高みを目指したいという方はぜひマスターしておきましょう。

 

なお、オブジェクト指向については
Pythonでオブジェクト指向を解説する」の記事で、
関数化については、
プログラミングで関数を作る意味とは?」の記事で詳しく解説しています。

 

ぜひこちらも参考にしてみて下さい。

 

内包表記やPythonについてもっとスキルをつけるなら

内包表記やPythonについてもっとスキルをつけるなら

Pythonの内包表記について解説しました。

 

内包表記はPythonを学ぶ上で、重要な知識です。

 

Pythonをマスターすると様々なことがプログラムでできるようになります。

Pythonを深く網羅的に学ぶためには以下の書籍がオススメです。

 

この書籍はPythonについてかなり深く、そして丁寧に書かれています。

Python の基本文法だけでなく、

いかにして Python の持つ力を最大限引き出せるかという視点で書かれています。

 

Python 初心者はもちろん、すでに Python を使える方にもオススメの一冊です。

エンジニアとしての自身の価値をチェックする(完全無料)

エンジニアとして、

自分の価値がどれくらいのものかご存知でしょうか?

 

エンジニアとしてIT業界に身を置いていると

今の会社でずっと働くのか、フリーランスとして独立するのか …

と様々な選択肢があります。

 

どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも

自身の価値を知っておくことはとても重要です。

 

TechClips ME では、

職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。

▼▼▼▼▼

▲▲▲▲▲

しかもTechClips MEでは想定年収を企業から提示してくれるので、

自身の価値を数字で分かりやすくたしかめることができます。

 

登録はもちろん完全無料なので、一度登録してみると良いかもしれません。

 

コメント

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