所有内置的空列表功能

Vol*_*nko 2 python

任何人都可以解释为什么在这种情况下python内置buinction all返回?Trueall([])

In [33]: all([])
Out[33]: True

In [34]: all([0])
Out[34]: False

In [35]: __builtins__.all([])
Out[35]: True
Run Code Online (Sandbox Code Playgroud)

Dun*_*can 6

我不相信任何其他答案都真正解决了为什么会出现这种情况的问题.

Python的定义all()来自布尔逻辑.例如,如果我们说"所有天鹅都是白色的",那么一只黑天鹅就会反驳这一说法.然而,如果我们说"所有的独角兽都是粉红色的",那么逻辑学家就会把它作为一个真实的陈述,仅仅是因为没有非粉红色的独角兽.或者换句话说,"所有"都是真实的.

实际上它给了我们一个有用的不变量.如果all(A)并且all(B)都是真的那么组合all(A + B)也是如此.如果all({})是假的,我们应该有一个不太有用的情况,因为组合两个表达式,其中一个是假的突然给出意想不到的真实结果.

所以Python all([]) == True从布尔逻辑中获取,并与具有类似结构的其他语言保持一致.

把它带回到Python中,在许多情况下,空洞的事实会使算法变得更简单.例如,如果我们有一棵树并且想要验证所有节点,我们可能会说节点在满足某些条件且其所有子节点都有效的情况下是有效的.随着all()对此的替代定义变得更加复杂,因为我们必须说它是有效的,如果它满足条件并且没有子女或其所有子女都有效.

class Node:
    def isValid(self):
        return some_condition(self) and all(child.isValid for child in self.children)
Run Code Online (Sandbox Code Playgroud)