【发布时间】:2020-10-20 05:40:49
【问题描述】:
文档:
all(iterable):如果可迭代对象的所有元素都为真(或可迭代对象为空),则返回True。
但是,我无法使用 Python3 解释下面的结果 4 和 5:
-
tupleData = ((1), (1, 4), (2, 3))返回True(好) -
tupleData = ((0), (1, 4), (2, 3))返回False(确定) -
tupleData = ((None), (1, 4), (2, 3))返回False(确定) -
tupleData = ((0, None), (1, 4), (2, 3))返回True(为什么?) -
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