2017-02-24 6 views
3

私は、競争力のあるプログラミングサイトにあった、そしてこの奇妙な(私には)Pythonの3のコードを書いた男が見つかりました:rがある場合二つの角括弧側:奇妙な効果

[r,"Nothing"][r==""] 

それは、'Nothing'を出力空の文字列

これはどのように呼び出され、それはどういう意味ですか?三元演算子のように見えます。

答えて

5

これはどのように呼び出され、それはどういう意味ですか?三元演算子のように見えます。

Python AFAIKに正式な名前はありません。それは実際には、リストを索引付けする、ちょっと恥ずかしがり屋な方法です。

r == ''Falseある場合r==""Truerある場合は"Nothing"を選択します。例として:TrueFalse以来

>>> [0, 1][True] 
1 
>>> [0, 1][False] 
0 

をするときに、インデックスのリストを、それぞれ10として解釈されます。

スニペットそれが空の文字列[r=='']rの比較True/False結果を使用して、2つの要素を一時リストを定義[r, "Nothing"]、次いでインデックス提供。

最も読みやすいコードではなく、おそらくあなたが使用する予定のないリストを作成するための最良のアイデアではありません。より効率的な

"Nothing" if r == "" else r 

より読みやすく、ロット:それは簡単に条件式により置換することができる

%timeit True if False else False 
10000000 loops, best of 3: 32.9 ns per loop 

%timeit [False, True][False] 
10000000 loops, best of 3: 176 ns per loop 

リストとそれを添字する必要はありませんを作成する必要はありません。条件付きで読み込み中です。

1

それに変換:この文脈で

if (r==""): 
    'Nothing' 
else: 
    r 

Falseは0、及び1とTrueとして使用される。

>>> [r,'Nothing'][False] 
'foo' 
>>> [r,'Nothing'][True] 
'Nothing' 

これは他の言語に'condition'?'if true':'if false'にワンライナー似ています。これは通常可能な限り最短のコードを生成する必要があるcode golfで使用されます。

+0

うん、そうですよ!それは難しいです!どうもありがとうございました! –