2016-11-16 46 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'使用'==',并且没有办法改变它。 –