【问题标题】:Boolean testing a list in Python在 Python 中对列表进行布尔测试
【发布时间】:2012-07-28 18:14:46
【问题描述】:

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

所以我尝试 list is False,结果返回 False。也许我想使用 == ? 不,这也返回了错误。 list 为 True,与 list == True 一样返回 false。

现在我很困惑,所以我快速搜索了一下,结果是:Best way to check if a list is empty

最佳答案是:

if not a:
    print "List is empty"

所以我搜索了更多内容,最后在 python 手册中找到了 4.1 的说明:

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

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

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

谢谢

【问题讨论】:

    标签: python list boolean


    【解决方案1】:

    空列表不是 False,但是当您将其转换为布尔值时,它会转换为 False。对于字典、元组、字符串等也是如此:

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

    当您将某些内容置于if 子句的条件中时,它是用于测试if 的布尔值。这就是if someListif bool(someList) 相同的原因。同样,not foo 是布尔值 not,所以 not [] 等于 True。

    【讨论】:

    【解决方案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)
    

    【讨论】:

      【解决方案3】:

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

      mylist == False 的意思是“名为mylist 的对象是否等于 False

      not mylist 的意思是“名为mylist 的对象的行为是否错误?


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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-04
          • 1970-01-01
          • 1970-01-01
          • 2015-04-06
          • 2013-03-24
          • 1970-01-01
          • 2018-10-25
          • 2021-12-05
          相关资源
          最近更新 更多