CHAPTER 9 · 5 lessons · 65問
内包表記
リストから新しいリストを1行で作る。Python らしさがいちばん濃く出る書き方。
「リストの中身を全部2倍にした、新しいリストがほしい」。こういう処理は毎日のように書く。第2章で覚えたやり方なら、空のリストを作って、for で回して、append で足していく——3行か4行だ。
Python には、これを1行で書く専用の書き方がある。内包表記だよ。
[x * 2 for x in kazus] と書けば、それでもう新しいリストになる。読み方は「kazus の中の x それぞれについて、x * 2 を並べたリスト」。慣れるまでは順番が逆に感じるけれど、慣れるとこちらのほうが読みやすくなる。「何を作るのか」が行の先頭に書いてあるからだ。
さらに if を足せる。[x for x in kazus if x > 0] なら「0より大きいものだけを集めたリスト」。「変換」と「絞りこみ」が1行に収まる。
なぜこれをわざわざ1章使って扱うのかというと、Python のコードを読むうえで避けて通れないからだよ。GitHub にある Python を開けば、まず間違いなく内包表記が出てくる。書けなくても困らないが、読めないと詰まる。この章は「書けるようになる」より「見た瞬間に意味が分かる」ことを目標にする。
章の後半では、入れ子(リストの中のリストを一気にほどく)と、リスト以外への応用を扱う。中かっこに変えれば辞書になるし({k: v for ...})、値だけ並べればセットになる。書き方の骨格は同じで、囲む記号が変わるだけだよ。
ひとつ注意も添えておく。内包表記は短く書けるけれど、詰めこみすぎると読めなくなる。3段の入れ子に if が2つ、みたいなコードは、素直に for で書いたほうが親切だ。短さは目的ではない。読みやすさが目的で、内包表記はたいていの場合それに貢献する、という順序で覚えてほしい。