【问题标题】:all() function acting strange [duplicate]all() 函数表现得很奇怪
【发布时间】:2020-10-20 05:40:49
【问题描述】:

文档:

all(iterable):如果可迭代对象的所有元素都为真(或可迭代对象为空),则返回 True

但是,我无法使用 Python3 解释下面的结果 4 和 5:

  1. tupleData = ((1), (1, 4), (2, 3))返回True(好)
  2. tupleData = ((0), (1, 4), (2, 3)) 返回False(确定)
  3. tupleData = ((None), (1, 4), (2, 3)) 返回False(确定)
  4. tupleData = ((0, None), (1, 4), (2, 3)) 返回True(为什么?)
  5. tupleData = ((), (1, 4), (2, 3)) 返回False(为什么, 如果 iterable 为空,它不应该返回 True 吗?

谢谢大家,尤其是 Barmar。有了您现在提到的要点,我理解了这些输出: any() 和 all() 在这里迭代顶级元组(而不是嵌套元组)。空嵌套元组被认为是顶级元组中的 False 元素,反之亦然。

【问题讨论】:

  • 非空元组为真。 4 中没有一个元组是空的。
  • 在4中,iterable中的所有项目都有一些东西,所以都被认为是“真实的”。在 5 中,第一个项目不是,所以迭代中的每个项目都不是这样考虑的。 Python 考虑空序列False(不管它们的子内容的值)。
  • 这能回答你的问题吗? How do Python's any and all functions work?
  • 顺便说一句,3 中的(None)None 相同。那不是元组,你需要写(None,) 来得到一个只有一个元素的元组。
  • 空迭代返回False。这就是结果 4 返回True 的原因。第一个 tuple 不为空,并且由于所有其他可迭代项都不为空,因此 4 的结果为 True。结果 5 也是一样。由于第一个 tuple 为空,因此并非所有都是 True,因此结果为 False

标签: python iterable any


【解决方案1】:

对于第 4 种情况:查看此页面 https://note.nkmk.me/en/python-tuple-single-empty/ ,要创建一个包含一个元素的元组,您必须在该行中显式添加逗号。所以 (0) 被认为是 0,这就是为什么它被认为是错误的。 (0, None) 是一个元组,它的元素都是假的,但它不是空的。这就是为什么被认为是真实的。 对于第 5 种情况:您调用 all 方法的可迭代对象可以为空,否则将检查可迭代对象中的每个元素。在您的情况下,第一个元素是一个空薄纱,这是一个 Falsey 值。

【讨论】:

    猜你喜欢
    • 2014-02-05
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    • 2014-12-12
    • 2012-11-11
    • 1970-01-01
    相关资源
    最近更新 更多