2017-07-19 178 views
15
>>> item = 2 
>>> seq = [1,2,3] 
>>> print (item in seq) 
True 
>>> print (item in seq is True) 
False 

爲什麼第二個print聲明輸出False'in'運算符意外的結果 - Python

+1

這可能是因爲python如何評估一個表達式。您可能需要使用'打印(序列(項目)爲真)' –

回答

23

inis是比較操作符在Python,在這方面如,比方說,<==相同。一般地,如

(expr1 <comparison1> expr2) and (expr2 <comparison2> expr3) 

除了expr2只計算一次

expr1 <comparison1> expr2 <comparison2> expr3 

得到治療。這就是爲什麼,例如,

0 <= i < n 

按預期工作。但是,它適用於任何鏈式比較運算符。在你的榜樣,

item in seq is True 

被視爲

(item in seq) and (seq is True) 

seq is True部分是假的,所以整個表達式爲假。爲了得到什麼,你可能打算,使用括號來改變分組:

print((item in seq) is True) 

Click here for the docs。如下圖所示

>>>print ((item in seq) and (seq is True)) 
False 

(SEQ是真)是假,因此您的發言輸出假

3

你的陳述item in seq is True內部評價爲(item in seq) and (seq is True)

+0

這並不是說在@Tim彼得斯答案充分的解釋? –

+0

@ t.m.adam - 我們同時或多或少都回答了問題。如果他的回答更詳細地解釋了這一點,讓我刪除這個答案。 – Beginner

+0

@Beginner NO。一個問題不能有兩個正確答案嗎? – void

1

下面的答案不正確。註釋解釋它證實了我:

In [17]: item in (seq is True) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-17-4e7d6b2332d7> in <module>() 
----> 1 item in (seq is True) 

類型錯誤:類型「布爾」的說法是不迭代


以前的答案 我相信它正在評估seq is True(其計算結果爲布爾False) ,然後評估item in False(其評估爲False)。

想必你的意思print (item in seq) is True(計算結果爲True)?

+2

'項提出了一個'TypeError',作爲右手值必須是一個迭代,這'FALSE'不是。 –

+0

更改了答案。謝謝 – travelingbones