布尔在Python中测试列表

时间:2012-07-31 02:35:54

标签: python list boolean

我正在测试一个列表,看它是否为空。通常情况下我使用len(list)== 0而且我依旧记得在不久前读过,测试列表是否为空的正确方法是它是真还是假。

所以我试过list是False,返回False。也许我想要使用==? 不,那也是假的。 list为True,返回false,如list == True。

现在我很困惑,所以我快速谷歌并最终:Best way to check if a list is empty

最佳答案是:

if not a:
    print "List is empty"

所以我搜索了一些更多内容并最终在4.1中指出的python手册中:

可以测试任何对象的真值,用于if或while条件或下面布尔运算的操作数。以下值被视为false:

任何空序列,例如'',(),[]。

现在我很困惑。如果我测试列表就好像不是列表,它可以正常工作。但是如果一个空列表是假的,那么为什么我不能这样做,如果list是False或者list == False?

由于

4 个答案:

答案 0 :(得分:12)

空列表不是False,但是当您将其转换为布尔值时,它会转换为False。同样,对于dicts,元组,字符串等:

>>> [] == False
False
>>> bool([]) == False
True
>>> {} == False
False
>>> bool({}) == False
True

当您在if子句的条件下放置某些东西时,它的布尔值用于测试if。这就是if someListif bool(someList)相同的原因。同样地,not foo没有布尔值,因此not []等于True。

答案 1 :(得分:2)

正如其他人所说,在python bool([]) == False中。 python程序员经常利用的一件事是运算符andor不一定(必然)返回True / False。请考虑以下事项:

3 and 4  #returns 4
0 and 8  #returns 0 -- This is short-circuit evaluation
0 or 8   #returns 8
True or 0 #returns True -- This is short-circuit evaluation

[] or False #returns False
False or [] #returns []

if语句中发生的情况是条件得到如上所述,然后python隐式调用结果上的bool - 所以你可以把它想象成:

if condition:

与以下内容相同:

if bool(condition):

就python而言。同样适用于not运算符:

not condition

相同
not bool(condition)

答案 2 :(得分:1)

mylist is False表示“名为mylist 的对象与False完全相同的对象?”

mylist == False表示“名为mylist 的对象是否等于 False

not mylist表示“名为mylist的对象是否表现不佳?


这些都不等同:1 is not 1.01 == 1.0[] != Falsenot [] is True

答案 3 :(得分:0)

将列表与False进行比较,测试列表的真实性或虚假性并不完全相同。空列表不等于False,但在布尔上下文中表现为False

这是另一种说法,可能有助于理解这一点:

print (bool([]) == False) # will print True
print ([] == False) # will print False