Pythonで三項演算子を使いたい


2016年 11月 27日

C言語では、

num = 12;
str = num > 10 ? "Big" : "Small";

という風に三項演算子が使えて便利だった。



Pythonで、これを

>>> num = 12
>>> if num > 10:
...     str = 'Big'
... else:
...     str = 'Small'
... 
>>> str
'Big'

と書くのは面倒だ。この4行のif文を1行にできないものだろうか?

Pythonの本を見ても、if の説明はこの4行タイプばかりである。


実は、これを1行で書くことが可能なのだ。

>>> num = 12
>>> str = 'Big' if num > 10 else 'Small'
>>> str
'Big'
>>> num = 8
>>> str = 'Big' if num > 10 else 'Small'
>>> str
'Small'

もちろん、代入文にせず、式だけでも書ける。

>>> num = 8
>>> 'Big' if num > 10 else 'Small'
'Small'

条件式の書式を書くと、次のようになる。

〈式t〉 if   〈条件式〉    else    〈式f〉

この書き方は、使いこなせれば便利なことは多い。それは、C言語での3項演算子(? :)と同じである。

以下は、良い子は読まない方が良いと思うが書いておく。


実は、これ以外にも1行で書く方法がある。といっても、かなりアレな方法である。

>>> num = 12
>>> ['Small','Big'][num>10]
'Big'
>>> num = 8
>>> ['Small','Big'][num>10]
'Small'

この書式は次のようになっている。

[〈式f〉, 〈式t〉] [〈条件式〉]

条件式がTrueのときに1,Falseのときに0として扱われるので、この書き方が成立する。


この書き方でコンパクトになるが、非推奨である。