TIM Labs

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

| コメント(0) | トラックバック(0)
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として扱われるので、この書き方が成立する。

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

トラックバック(0)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/523

コメントする

このブログ記事について

このページは、fujiが2016年11月27日 00:00に書いたブログ記事です。

ひとつ前のブログ記事は「誤差が少なくなる級数計算方法で円周率100万桁達成」です。

次のブログ記事は「Deep Learningの Backpropagationはどのくらい高速か?」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。