
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コード)
内包表記の中では、これが最もよくみる形かもしれません。
やっていることは単純で、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コード)
内包表記はリストだけではなく、辞書でも使うことができます。
辞書内包表記のルールは以下の通りです。
{キー:値 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での分岐を使ったリスト内包表記を解説します。
内包表記での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コード)
ここからはさらに応用編です。
Pythonにはlambda式という記法があります。
一言でいうと、無名関数で処理を定義することですね。
なお、Lambdaについては
「PythonのLambda式とは【サンプルコード付き】」の記事で詳しく解説しています。
これをリスト内包表記と合わせて使うこともできます。
例えば、
- 数字を10倍するlambda関数を作る
- 数字のリストに対して、その関数をかけて、新たなリストを作る
という処理をコードで書くとします。
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の内包表記についてきちんと理解するなら、
Udemyの教材がオススメです。
>> 現役シリコンバレーエンジニアが教えるPython 3 入門 + シリコンバレー流コードスタイル
Udemyは動画ベースで学習ができるので、
実際のコードや図解を見ながら、学習を進めることができます。
さらに今なら30日間返金保証がついているので、
一度購入して自分の思っていたものと違った場合は費用がかかりません。
この教材はPythonの基礎から応用まで徹底的に解説しています。
また、現役シリコンバレーエンジニアによる本格的な解説も魅力です。
10000近く購入されているにも関わらず、
評価が4.4以上もあることからもその質の高さが分かると思います。
また、Pythonについて基礎から学ぶのであれば、オンラインスクールがオススメです。
オンラインスクールで学習すると、講義も分かりやすく、
サポート体制もしっかりしているので、これからPythonを学ぶ人にもオススメです。
オンラインで無料レッスンを体験することもできるので、
自分にあっているかどうかを確かめることができます。
オススメは以下の3つです。
どのスクールも無料体験が用意されているので、
契約前に自分に最適なスクールを探すことができるでしょう。
✔️オススメのプログラミングスクール ベスト3
- 未経験からIT業界へ転職なら【DMM WEBCAMP】
※ROLANDさんがプロモーターを務める有名スクールです。無料体験の内容も充実していて人気です。 - プログラミングのオンラインスクールCodeCamp
※ここも有名なスクールです。サポート体制がしっかりしているので安心です。 - 3ヶ月間のプログラミングスクール【Tech Boost】
※比較的新しいスクールですが、そのクオリティの高さから伸びてきているスクールです。
プログラミングスクールについては「プログラミングスクールで失敗しないためには【オススメベスト3も紹介】」の記事でも紹介しています。
気になった方はぜひチェックしてみて下さい〜!
コメント