2016-11-16 74 views
4

我有一個愚蠢的問題。 可以說我有一個不同值的列表。像這樣:區分假和0

[1,2,3,'b', None, False, True, 7.0] 

我想遍歷它並檢查每個元素是否不在某些禁止值列表中。例如,此列表是[0,0.0]

而當我檢查是否假[0,0.0]我得到True。據我所知,Python在這裏將False轉換爲0。 但我怎麼能避免它,並使此檢查正確 - False值不在[0,0.0]名單?

+0

列表將被評估爲True。檢查[這個問題](http://stackoverflow.com/questions/1452489/evaluation-of-boolean-expressions-in-python) –

+0

你應該單獨檢查值,你的方法將最多隻能告訴你某些失敗,但不會告訴你什麼,這將是你或你的用戶下一個問題。 – DejaVuSansMono

+3

您可能想要重新考慮導致包含「False」和「0」值的列表的決定,這些值需要區別對待。 – chepner

回答

8

要區分False0,您可以使用is來比較它們。 False是一個單例值,並且始終指向同一個對象。要比較所有列表中的項目,以確保他們不False,嘗試:

all(x is not False for x in a_list) 

BTW,Python不拈東西:布爾是整數的一個子類,並False簡直是等於0,不需要轉換。

1

比較時,您希望使用is而不是==

y = 0 
print y == False # True 
print y is False # False 

x = False 
print x == False # True 
print x is False # True 
+1

很好的建議,但原始代碼不包含'==',它包含'in'。這不是對這個問題的真實答案。 –

+0

所以我們得到的教訓是,如果你真的需要知道'False'和'0'之間的區別,那麼對於兩個邏輯的比較,你應該使用'is'和'is'而不是'==' – wander95

+0

@ wander95是。 「真」和「1」。大多數時候你不需要區分。 'in'使用'==',並且沒有辦法改變它。 –