首页 > 解决方案 > 为什么 [] == False 在 python 中评估为 False 但 0 == False 为 True?

问题描述

我对 Python 比较陌生,不了解以下行为:

为什么声明

[] == False 

评估为假,即使空列表是假的?

这里有更多示例 - 在许多其他情况下,空列表似乎确实以虚假的方式表现,而不是 [] == False...

>>> 0 == False                # what I'd expect
True
>>> not []                    # what I'd expect
True
>>> bool([])                  # what I'd expect
False
>>> [] == True                # what I'd expect
False
>>> [] == False               # unexpected
False
>>> bool([]) == False         # why does it evaluate to True again now?
True
>>> ([]) == (bool([]))        # unexpected
False
>>> (not []) == (not bool([]) # apparently adding 'not' makes it behave as expected again - why?
True


有人可以向我解释一下吗?这些陈述是如何内部评估的?
我有一种感觉,它可能与链接比较有关(参见例如此处),但不能真正理解这是否正确以及为什么。

标签: pythonbooleanequality

解决方案


因为 falsy 不是False。Falsy 只是意味着

bool(some_object) is False

所以,

>>> bool([]) is False
True
>>> bool({}) is False
True
>>> bool(0) is False
True

推荐阅读