Pythonのリスト内包表記を徹底解説!

こんにちは。ゆうせいです。

Pythonのリスト内包表記は、既存のリストなどのコレクションから、forループを1行で簡潔に書いて新しいリストを作成するためのスマートな書き方です。📝

コードが短くなるだけでなく、何をしているかが一目で分かりやすくなるため、多くのPythonプログラマに愛用されています。


基本的な書き方

リスト内包表記の基本的な構造はとてもシンプルです。

[式 for 要素 in 元のリスト]

これを日本語にすると、「元のリスト各要素に対して、このを適用して、新しいリストを作ってね」という意味になります。

forループとの比較

例えば、数値のリストを2乗した新しいリストを作りたい場合を考えてみましょう。

通常のforループ

numbers = [1, 2, 3, 4, 5]
squared_numbers = []
for n in numbers:
    squared_numbers.append(n * n)

# squared_numbers は [1, 4, 9, 16, 25] になる

リスト内包表記

numbers = [1, 2, 3, 4, 5]
squared_numbers = [n * n for n in numbers]

# こちらも [1, 4, 9, 16, 25] になる

3行のコードが、たった1行で書けてしまいましたね!🎉


if文で条件を追加する

リスト内包表記には、if文を組み合わせて、特定の条件に合う要素だけを新しいリストに含めることもできます。

[式 for 要素 in 元のリスト if 条件]

forループとの比較

数値のリストから、偶数だけを取り出した新しいリストを作ってみましょう。

通常のforループ

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
even_numbers = []
for n in numbers:
    if n % 2 == 0:
        even_numbers.append(n)

# even_numbers は [2, 4, 6, 8] になる

リスト内包表記

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
even_numbers = [n for n in numbers if n % 2 == 0]

# こちらも [2, 4, 6, 8] になる

forの後にifを繋げるだけで、フィルタリング処理も1行で書けてしまいます。


なぜリスト内包表記を使うのか?

リスト内包表記には、いくつかの素晴らしいメリットがあります。

  • 簡潔さ (Conciseness): コードの行数を大幅に削減できます。
  • 可読性 (Readability): 慣れると、「あるリストから特定の条件で新しいリストを作っている」という意図が、appendを追いかけるよりもずっと明確に伝わります。
  • パフォーマンス (Performance): 多くの場合、通常のforループよりも処理が少しだけ高速です。

まとめ

リスト内包表記は、Pythonらしいコードを書くための非常に強力なツールです。最初は少し戸惑うかもしれませんが、簡単なものから使い始めて、ぜひ慣れていってください。

ただし、やりすぎには注意です!もしifの条件が複雑になったり、ループが二重、三重になったりして、1行が長くなりすぎて読みにくくなる場合は、素直に通常のforループで書く方が良い場合もあります。

コードは、まず読みやすさが一番ということを忘れないでくださいね!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。