空列表布尔值

时间:2012-10-21 11:17:54

标签: python list boolean

这可能只是愚蠢,但对我来说有点令人困惑:

In [697]: l=[]

In [698]: bool(l)
Out[698]: False

In [699]: l == True
Out[699]: False

In [700]: l == False
Out[700]: False 

In [701]: False == False
Out[701]: True

为什么l==False会在False返回False == False时返回True

3 个答案:

答案 0 :(得分:28)

您正在根据布尔值False的文字值进行检查。与'A' == False相同的情况不一样。

如果你施展它,你会看到差异:

>>> l = []
>>> l is True
False
>>> l is False
False
>>> l == True
False
>>> l == False
False
>>> bool(l) == False
True

False == False成立的原因是因为您正在比较相同的对象。它与2 == 2'A' == 'A'相同。

当您看到if l:之类的内容并且此检查永远不会通过时,就会遇到困难。那是因为您正在检查项目的真值。按照惯例,所有这些项都将失败一个布尔检查 - 也就是说,它们的布尔值将是False

  • None
  • False(显然)
  • 任何空序列:''[]()
  • 任何“零”值:00.0
  • 任何空集合:{}(空字典)
  • len()返回0
  • 的任何内容

这些被称为“假”值。 其他一切都是“真实的” 。这可能导致一些奇怪的事情,如:

>>> def foo():
...   pass
...
>>> bool(foo)
True

此处还要注意,方法不返回显式值,总是将None作为返回类型,这会导致:

>>> def bar():
...   x = 1+1
...
>>> bool(bar)
True
>>> bool(bar())
False

答案 1 :(得分:6)

空列表与False不同,但False等于False,因为它是同一个对象。 bool(l)返回False,因为空列表是“假的”。

简而言之,==不是bool() == bool()

例如,[1, 2] == [1, 2, 3]False,即使这两者是“真正的”。

答案 2 :(得分:3)

这是因为空列表不是False,转换为bool时只是“假”,或者由ifwhile评估时条件(两者都评估其条件的bool转换)。有关详细信息,请参阅documentation on Truth Value Testing