2013-01-22 22 views
54

可能重複:
Ternary conditional operator in PythonPython中的if-else速記

我想做的事情在python以下:

while(i < someW && j < someX){ 
    int x = A[i] > B[j]? A[i++]:B[j++]; 
    .... 
} 

顯然,當任ij達到極限,代碼將跳出循環。我需要循環以外的值ij

我必須真正做到

x=0 
... 
if A[i] > B[j]: 
    x = A[i] 
    i+=1 
else: 
    x = B[j] 
    j+=1 

還是沒有人知道一個較短的方法嗎?

除上述之外,我可以讓Python支持類似的東西

a,b=5,7 
x = a > b ? 10 : 11 
+0

@MartijnPieters:第二部分肯定是重複的,但我不確定第一部分。 – DSM

+0

@DSM:好吧,第一部分將不再需要再次pythonic結構和循環被發現的OP ..你會嘗試寫一個完整的介紹到迭代器? –

+0

@DSM:我也沒有看到任何人在下面尋址那部分。 ;-) –

回答

8

試試這個:

x = a > b and 10 or 11 

這是執行的一個樣本:

>>> a,b=5,7 
>>> x = a > b and 10 or 11 
>>> print x 
11 
+12

'10 if a> b else 11'。不需要訴諸布爾運算符。 –

+0

@MartijnPieters:好點,先生。 :) – DonCallisto

+0

謝謝。這適用於我的問題的第二部分。投票! – learner

132

最可讀的方式是

x = 10 if a > b else 11 

但你可以使用andor,太:

x = a > b and 10 or 11 

的「Python的禪」說,「可讀性罪狀」,雖然如此,去的第一種方式。

另外,如果您將一個變量而不是10並且它的計算結果爲False,則該和 - 或技巧將失敗。

然而,如果超過了分配取決於這種情況下,這將是更具可讀性寫它,你必須:

if A[i] > B[j]: 
    x = A[i] 
    i += 1 
else: 
    x = A[j] 
    j += 1 

,除非你把ij在容器中。但是如果你向我們展示你爲什麼需要它,那很可能你不知道。

+4

在Python 2.5中添加 –

+0

謝謝。這適用於我的問題的第二部分。投票! – learner

+0

我編輯過,以表明我需要while循環之外的'j'和'i'。 – learner