【问题标题】:Why does [] == False evaluate to False but 0 == False to True in python? [duplicate]为什么 [] == False 在 python 中评估为 False 但 0 == False 为 True? [复制]
【发布时间】:2019-04-24 01:02:25
【问题描述】:

我对 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


有人可以向我解释一下吗?这些陈述是如何内部评估的?
我感觉这可能与链接比较有关 (see e.g. here),但无法真正理解这是否正确以及原因。

【问题讨论】:

  • false 和 falsey 不是一回事

标签: python boolean equality


【解决方案1】:

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

bool(some_object) is False

所以,

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

【讨论】:

  • 好的,那么0和空列表在这方面有什么区别呢?说 0 既是 falsy 又是 False 是否正确,而空列表只是 falsy 而不是 False?
  • @sam_sc 因为在 Python 中,由于历史原因,布尔值是 int 的子类,只有两个值,True 和 False,分别等于 1 和 0。
  • @sam_sc 当然,这是一个合理的说法。
  • 好的,历史解释对我来说很有意义。我有一种感觉,就是这样。感谢您的回答,这对您有很大帮助!
猜你喜欢
  • 1970-01-01
  • 2015-03-15
  • 2015-03-22
  • 2022-01-10
  • 2015-09-30
  • 2014-02-16
  • 1970-01-01
  • 2012-09-11
  • 2012-01-24
相关资源
最近更新 更多