Python初級コースプログラミング

【脱初心者】Python リスト内包表記【わかる!】

スポンサーリンク

白黒つけようぜ!くまねこ(@kumanecoblog)です。
今日もPython捗っていますか?

学習を進めていく中で「リスト内包表記」という単語を聞いたことがあると思います。

「使えると便利だよ」と聞いたことはあるけれど
そんなに便利なの?

そうなんです!とても便利なんです。
例えば、リスト内包表記を使えば、3行のコードを1行にすることができます!

くまねこ君
くまねこ君

たったそれだけ?と思うかもしれないけれど
これが10箇所出てきたら、20行短くできるんだよ!

コードを短く書けることはエンジニアにとってはとても重宝される能力です。
コードが綺麗になり読みやすくなり、そしてシステムの動作も軽くすることができます。

綺麗なコードが書けることは、脱初心者の一歩!中級者への入り口です!

今回は「リスト内包表記」について、どこよりもわかりやすく丁寧に解説します!
最後には練習問題も用意してあります!ぜひ活用してください!

この記事は
  • リスト内包表記について知りたい
  • リスト内包表記が使えるようになりたい
  • Python中級者になりたい

という方に、とても役に立つ記事です。

スポンサーリンク

リスト内包表記とは

リスト内包表記は、リストの作成方法の1つです。
リスト内に、for文やif文を一緒に使うことで、1行でまとめられる書き方です。
データサイエンスの仕事を視野に入れてる方は超必須です。

ただし、慣れるまでは非常に難しく感じると思います。

くまねこ君
くまねこ君

ここで使い方を押さえて、どんどん活用してみて!

スポンサーリンク

リスト内包表記の使い方

リスト内包表記で使われるのが、for文とif文です。
この二つを順番に解説します。

「通常の書き方」と「リスト内包表記」の2つを並べます。
2つを比較して、どんな関係があるのかを理解できたらGOODです!

for文を使ったリスト内包表記(基本の形)

では2つのサンプルコードを比較してみてください。
どちらも「0〜4が入っているリストの値を全て10倍にしてください」というものです。

通常の書き方
list = []
for i in range(5):
  list.append(i*10)
# 結果
[0, 10, 20, 30, 40]
リスト内包表記
list = [i*10 for i in range(5)]
# 結果
[0, 10, 20, 30, 40]

なんとな〜く関係が見えましたか?
書き方の違いは一目瞭然ですが、実は書いてある内容は同じです!

リスト内包表記の書き方は、処理した内容を先頭に書いてからfor文です。

for文を使ったリスト内包表記
[処理 for 変数名 in 範囲]

やっていること自体は単純ですが、複雑ですね。
僕は今でも「for 変数 in 範囲」を作った後に条件を考えて、それから付け加えるという作り方でリスト内包表記を書いています。

一発でサクッと書けるのが一番だけれど、
書ければヨシッ!ですw

if文を使ったリスト内包表記

こちらも2つのサンプルコードを比較してみてください。
どちらも「0〜10が入っているリストの中から偶数だけ取り出してください」というものです。

通常の書き方
list = []
for i in range(11):
  if i % 2 == 0:
    list.append(i)
# 結果
[0, 2, 4, 6, 8, 10]
リスト内包表記
list = [i for i in range(11) if i % 2 == 0]
# 結果
[0, 2, 4, 6, 8, 10]

これもfor文使った時と似てますね!
if文のは、「もうそのまま1行にしちゃいました!」のようなノリですね。

if文を使ったリスト内包表記は、for 文の内包表記に、if 条件式を最後に書くだけです!

for文を使ったリスト内包表記
[処理 for 変数名 in 範囲 if 条件式]
くまねこ君
くまねこ君

for文にif文を付け加えて作れるから、
for文を使ったリスト内包表記が基本の形なんだよ!

先頭の「処理」を書き忘れてエラーを出すミスがよくあるよ!
実際、僕はよくこのミスをやってしまいます・・・

スポンサーリンク

練習問題

複雑!難しいですね!
慣れるまで本当に難しく感じると思います。
なので、いくつか練習問題をやって、頭の中を整理しましょう!

練習問題
  1. リスト内を全て3倍にするコードを1行で書いてください。
    リスト内は1〜5の範囲をrange関数で指定してください。
  2. リスト内に奇数のみにするコードを1行で書いてください。
    リスト内は0〜12の範囲をrange関数で指定してください。
#1
list_a = [i*3 for i in range(1,6)]

#2
list_b = [i for i in range(13) if i % 2 == 1]

まとめ

以上がリスト内包表記でした!
何度も言いますが、これは本当に慣れるまでは難しいです!
ただ、多くのエンジニアが利用している書き方なので、必須構文です。
今は「こんなのがあるんだ」程度で大丈夫です。その状態でも、例えば何かのコードを参考にするときにリスト内包表記があれば「見たことある!」となり、読むことができます。
読める=書ける に繋がります!

複雑な表現ですが、必ずあなたのスキルになる構文です!

なにか分からないことがあればTwitterのDMにてご連絡ください。
「こんな簡単な事聞いちゃってもいいのかな」と心配することはありません。
どんなことでもお気軽にご連絡ください!

この記事が少しでも役立ててもらえたらうれしいです。
今回も最後まで読んでいただき、本当にありがとうございました!

コメント

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