在的第2章Data Science from Scratch 由 Joel Grus 提供,提供了以下示例:
all([ ]) # True, no falsy elements in the list
any([ ]) # False, no truthy elements in the list
根据 Grus 的说法,Python 将 []
(空列表)视为“错误”参数。那么为什么根据 all()
或 any()
参数应用于空列表会得到不同的结果呢?
最佳答案
all(iterable)
Return
True
if all elements of the iterable are true (or if the iterable is empty).
any(iterable)
Return
True
if any element of the iterable is true. If the iterable is empty, returnFalse
.
空的可迭代[]
是错误的,但这并不重要,因为返回值只是通过实现实现的。
如果您想知道为什么会发生这种情况,这只是实现的结果。如果您从文档中查看 all
的等效代码:
def all(iterable): for element in iterable: if not element: return False return True
由于这种特定的实现,如果可迭代为空,则完全跳过 for
循环,因为没有元素。因此,它返回True
。对于any
,文档提供了等效的代码:
def any(iterable): for element in iterable: if element: return True return False
它为空迭代返回 False
的原因与 all
返回 True
的原因相同。由于列表中没有元素,因此将跳过 for
循环并返回 False
。
此实现确实有一个推理,因为空集逻辑使 all
返回 true,请参阅 this Math.SE post和 this SO answer 。 all
可以被认为是“有与元素一样多的真实元素”。由于空集合没有 true 元素,也没有元素,因此它返回 true,因为 0 等于 0。any
可以被认为是“至少有一个...”,并且由于集合是空的,至少没有一个,因为甚至没有一个元素。因此,对于空集,all
返回 true,对于空集,any
返回 false。
关于python - 为什么空列表中的任何一个和所有都返回不同的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42685428/