Pythonのリスト内包表記ってどうなんだろう?

Pythonには、リストを簡単に作れる方法として「リスト内包表記」っていう記法があるみたいで、従来のforループでリストを作る方法に比べると、コードがかなり短くなるって話をよく聞くんだけど、本当に使えるのか、ここでまとめてみようかなと思う。

1. はじめに!

まず、リスト内包表記って何かをざっくり理解しようと思います。

これは、リストを作るときにfor文やif条件式を1行にまとめて書ける記法みたい。

たとえば、1から10までの数値をリストに入れるなら、普通はこんな感じに書く

numbers = []
for i in range(1, 11):
    numbers.append(i)
print(numbers)  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

でも、内包表記を使えば、たぶんこんなふうに一行で書けるようらしい:

numbers = [i for i in range(1, 11)]
print(numbers)  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

こんな感じで、[式 for 変数 in イテラブル]って書くだけで、rangeから得られる各値に対して式を適用して、その結果をまとめたリストが作れる。

2. 基本の書き方と使い方

2.1 基本形

リスト内包表記の基本形は、やはり次の通り。

[式 for 変数 in イテラブル]

たとえば、各値の2乗をリストに入れるなら、こんな風になるかな:

squares = [i ** 2 for i in range(1, 11)]
print(squares)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

2.2 条件付きで作る

if条件も付けられるみたい。条件を満たす値だけをリストにしたい場合は、こんな感じに書けるみたい:

evens = [i for i in range(1, 21) if i % 2 == 0]
print(evens)  # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

この条件付き内包表記、もしかしたら、よく使うかもLinQ慣れしてたから。

3. 応用例を試してみる

3.1 複雑な式との組み合わせ

内包表記は、ただの数値計算だけじゃなく、文字列操作や関数呼び出しとも組み合わせられる。 たとえば、リスト内の各数値を文字列に変換して先頭に「No.」を付けると、こんな感じになるみたい。。

numbers = [1, 2, 3, 4, 5]
formatted = [f"No.{num}" for num in numbers]
print(formatted)  # ['No.1', 'No.2', 'No.3', 'No.4', 'No.5']

3.2 ネストした内包表記

さらに、内包表記は2重のfor文もまとめられるらしい。たとえば、2次元リストを1次元に平らにするには、こんなふうに書くけど、慣れないと読みにくい:

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]

外側のループで各行を取り出し、内側のループでその行の各要素を処理している感じになるらしい。

4. メリットと注意点

メリット
  • コードが短くなる  内包表記なら、複雑な処理も1行で書けるからコードがかなりスッキリするらしい。

  • 可読性が向上するかも  シンプルに意図が伝われば、従来のforループよりも見やすくなる可能性がある。

  • パフォーマンスが良い場合も  場合によっては、内包表記のほうが高速にリストを作れることがあるらしい。

注意点
  • 複雑になりすぎると逆に読みにくくなる  ネストしすぎたりif条件を詰め込みすぎると、何がどうなっているのか分かりにくくなる可能性があるみたいだ。

  • 適度なバランスが大切  内包表記は便利だけど、可読性とのバランスを考えて、場合によっては従来のforループに戻したほうがいいかもしれない、っていう声もあるらしい。

5. まとめ

リスト内包表記は、Pythonならではの書き方で、従来のforループに比べてコードがずっと短く、スマートに書ける可能性がある。 ただ、あまり複雑に使いすぎると可読性が落ちるかもしれないので、適度なバランスを心がける必要があるかなぁ。。。って思いました。

この記事では、基本の構文、if条件付き、ネストした内包表記の例を紹介してみましたが、ご自分でも実際にコードを書いて試してみると、内包表記の便利さが少しは実感できるので、是非!

Pythonでのプログラミングを進める上で、内包表記をうまく使えれば、コードがもっとシンプルになり、効率も上がるんじゃないかと思う。

あと、最初、読みにくかったけど、書くと覚えるから理解が早まりました。 こんな感じで、内包表記についてまとめてみたんだけど、どうでしたでしょうか?

ご参考になれば嬉しいです。引き続き、よろしくお願いいたします。

愛用のドリンクをご紹介します。。(広告です)