2017-02-24 38 views
3

我是一個有競爭力的節目現場,發現是誰寫的這個奇怪的(對我來說)一個人的Python 3代碼:兩個方括號並排:奇效

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

它輸出'Nothing',如果r是空的字符串。

這是怎麼回事,這是什麼意思?它看起來像一個三元操作符。

回答

5

這是怎麼回事,這是什麼意思?它看起來像一個三元操作符。

在Python AFAIK中沒有它的正式名稱;這真是一種索引列表的詭,,令人費解的方式。

你會選擇"Nothing"如果r==""Truer如果r == ''False;作爲一個例子:

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

因爲TrueFalse分別解釋爲10,當你的索引列表。

只是提供的片段定義了與所述兩個元件[r, "Nothing"],然後使用的r與空字符串[r=='']比較的結果True/False索引它的臨時列表。

不是最易讀的代碼,可能不是創建不打算使用的列表的最佳方法;

"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,True爲1:

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

這是一個一行在其他語言類似於'condition'?'if true':'if false'。它通常用於code golf,您必須儘可能地生成最短的代碼。

+0

ooooh是的沒錯!這很棘手!非常感謝你! –