我有一個愚蠢的問題。 可以說我有一個不同值的列表。像這樣:區分假和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
[1,2,3,'b', None, False, True, 7.0]
我想遍歷它並檢查每個元素是否不在某些禁止值列表中。例如,此列表是[0,0.0]
。
而當我檢查是否假[0,0.0
]我得到True
。據我所知,Python在這裏將False
轉換爲0
。 但我怎麼能避免它,並使此檢查正確 - False
值不在[0,0.0]
名單?
要區分False
和0
,您可以使用is
來比較它們。 False
是一個單例值,並且始終指向同一個對象。要比較所有列表中的項目,以確保他們不False
,嘗試:
all(x is not False for x in a_list)
BTW,Python不拈東西:布爾是整數的一個子類,並False
簡直是等於0
,不需要轉換。
比較時,您希望使用is
而不是==
。
y = 0
print y == False # True
print y is False # False
x = False
print x == False # True
print x is False # True
很好的建議,但原始代碼不包含'==',它包含'in'。這不是對這個問題的真實答案。 –
所以我們得到的教訓是,如果你真的需要知道'False'和'0'之間的區別,那麼對於兩個邏輯的比較,你應該使用'is'和'is'而不是'==' – wander95
@ wander95是。 「真」和「1」。大多數時候你不需要區分。 'in'使用'==',並且沒有辦法改變它。 –
列表將被評估爲True。檢查[這個問題](http://stackoverflow.com/questions/1452489/evaluation-of-boolean-expressions-in-python) –
你應該單獨檢查值,你的方法將最多隻能告訴你某些失敗,但不會告訴你什麼,這將是你或你的用戶下一個問題。 – DejaVuSansMono
您可能想要重新考慮導致包含「False」和「0」值的列表的決定,這些值需要區別對待。 – chepner