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でのプログラミングを進める上で、内包表記をうまく使えれば、コードがもっとシンプルになり、効率も上がるんじゃないかと思う。
あと、最初、読みにくかったけど、書くと覚えるから理解が早まりました。 こんな感じで、内包表記についてまとめてみたんだけど、どうでしたでしょうか?
ご参考になれば嬉しいです。引き続き、よろしくお願いいたします。
愛用のドリンクをご紹介します。。(広告です)