区分假和0

Pau*_*aul 8 python

我有一个愚蠢但问题.假设我有一个包含不同值的列表.像这样:

[1,2,3,'b', None, False, True, 7.0]
Run Code Online (Sandbox Code Playgroud)

我想迭代它并检查每个元素是否都不在某些禁用值的列表中.例如,这个列表是[0,0.0].

当我检查是否为假时,[0,0.0我得到了True.我知道python会False转到0这里.但我怎么能避免它并使这个检查正确 - 该False值不在[0,0.0]列表中?

kin*_*all 15

告诉它们之间的区别False,0你可以is用来比较它们.False是一个单例值,始终引用同一个对象.要比较列表中的所有项目以确保它们不是False,请尝试:

all(x is not False for x in a_list)
Run Code Online (Sandbox Code Playgroud)

顺便说一下,Python在这里没有任何东西:布尔值是整数的子类,并且False字面上相等0,不需要转换.


Mic*_*win 7

在比较时,您会想要使用is而不是==

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

x = False
print x == False # True
print x is False # True
Run Code Online (Sandbox Code Playgroud)

  • 很好的建议,但是原始代码不包含`==`,而是包含`in`。这不是问题的正确答案。 (2认同)