pythonのリスト内包表記は凄い。すごく凄い。
御存知の通り、pythonにはリスト内包表記っていう便利なものがあります。
>>> [x*2 for x in range(10)] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
みたいなやつね。
>>> [[y*2 for y in range(x)] for x in range(5)] [[], [0], [0, 2], [0, 2, 4], [0, 2, 4, 6]]
もちろん入れ子にも出来る。
>>> [x for x in range(10) if x%3 == 0] [0, 3, 6, 9]
なんて感じでif文も仕込める。
ま、ここまでは序の口だ。
前に書いたけど、
>>> (x*3 for x in range(10)) #doctest: +ELLIPSIS <generator object <genexpr> at 0x...>
みたいにジェネレーターを作ることも出来る。
関数にジェネレーターを渡すことも出来る。
>>> type(x for x in range(3)) <type 'generator'>
更に、
>>> {x: x*2 for x in range(5)} {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}
こうすると辞書型も作れちゃう。すごい。
さらにさらに
>>> {x for x in range(3)} set([0, 1, 2])
集合型まで作れる!
うーむ、なんて万能な。 まだあるんじゃないかなー、こういう裏ワザ的なの。