2013年8月8日木曜日

Python 内包表記 if else

Pythonのリスト内包表記でifの使い方を書いているサイトは多いが、if elseはあまり書かれていない。
「できないかも」と考えている人もいるかもしれない。
しかし、できる。
工夫ではなくて、普通の書き方として用意されている。

内包表記でifを単体で使うときはこんな感じになるので、それにつられて末尾にelseをつけてみる人が多いようだ。
>>> # 5未満を返す(if 単体)
>>> hoge = range(10)
>>> hoge
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [x for x in hoge if x < 5]
[0, 1, 2, 3, 4]

ここで、5未満はそのまま返し、5以上は'larger'に置き換えたいときはこう書く。
 >>> [x if x < 5 else 'larger' for x in hoge]
[0, 1, 2, 3, 4, 'larger', 'larger', 'larger', 'larger', 'larger']
# [x for x in hoge if x < 5 else 'larger'] これは間違い

いつのバージョンから使えるのか知らないけど、とにかく2.7では使えている。