2012-10-31 85 views
1

字符串內可以說我有檢查列表蟒蛇

a = "FIFA 13" 

然後我寫

"bla" and "13" in a 

而且結果是真實的,爲什麼? BLA是不是在一個

+3

你的意思是:''bla「在a和」13「中的一個' –

+2

如果編程就像說英語,那麼錯誤的數量一個軟件會顯着減少。 – Fred

+4

@Fred這非常非常值得商榷。英語是高度模糊的,對於編程語言而言是非常不合意的屬性。 – NullUserException

回答

2

"bla"真正

"13" in a真正

因此,"bla" and "13" in a真正

你想寫什麼大概是:("bla" in a) and ("13" in a)

+2

這裏你不需要括號。'in'運算符的優先級高於'和'運算符。請參閱:http://docs.python.org/2/reference/expressions.html#summary –

+0

我知道,這只是爲了清晰起見,因爲提問者不熟悉這一點。 –

8

你的布爾表達式被評估爲("bla") and ("13" in a),非空字符串評估爲真,所以如果"13" in a爲真,那麼整個表達式將評估爲真。

相反,使用all()

all(x in a for x in ("bla", "13")) 

或者只是檢查這兩個分別:

"bla" in a and "13" in a 
3

您應該使用

In [1]: a = "FIFA 13" 

In [2]: "bla" in a and "13" in a 
Out[2]: False 
2

您的代碼不會被解釋就像是閱讀:

("bla") and ("13" in a) 

"bla"是truthy,所以它是一個自動評估爲True"13" in a可能是TrueFalse and True評估爲True,所以"bla"沒有真正考慮。

你必須更明確一點:

'bla' in a and '13' in a 

或者你可以使用一個不可讀的一行:

all(map(a.__contains__, ('bla', '13'))) 

對於短路的一行,我想你」你必須使用itertools.imap而不是map ..

+0

我們也可以使用'operator.contains()','all(map(lambda x:contains(a,x),(「bla」,「12」))) ' –