空列表中"全部"和"任何"结果的原因

det*_*tly 28 python logic

在Python,内置的功能allany回报True,并False分别对空iterables.我意识到,如果是相反的方式,仍然可以问这个问题.但我想知道为什么选择这种特定的行为.它是任意的,即.它可能就像其他方式一样容易,还是有潜在的原因?

(我问的原因仅仅是因为我永远不会记得哪个是哪个,如果我知道它背后的理由那么我可能.还有,好奇心.)

Mar*_*ers 39

一些比喻怎么样......

你有一个袜子抽屉,但它目前是空的.它是否包含任何黑色袜子?不 - 你根本没有任何袜子,所以你当然没有黑色袜子.显然any([])必须返回false - 如果返回true,这将是违反直觉的.

案件all([])稍微困难一些.请参阅Wikipedia关于空洞真相的文章.另一个类比:如果一个房间里没有人,那个房间里的每个人都会说法语.

数学all([])上可以写成:

集合A为空.

关于空洞陈述是否应该被认为是真的存在相当大的争论,但从逻辑的角度来看它是最有意义的:

所有真实真实陈述都是真实的主要论点如下:正如在关于逻辑条件的文章中所解释的那样,命题逻辑的公理要求如果P为假,则P => Q为真.也就是说,如果我们接受这些公理,我们必须接受真实的真实陈述.

同样来自文章:

似乎没有直接理由选择真实; 如果我们不这样做,那就是我们脸上的东西会爆炸.

定义一个"真实的"语句以在Python中返回false将违反最不惊讶原则.

  • "是_11只腿的猫吸血鬼?是的 - _all_ 0." "那只有十一条腿的吸血鬼猫吗?不,没有_any_." (9认同)
  • 很好地由一个超过平均武器数量的男人投入 (3认同)
  • 显然,Python需要一个`FileNotFound`值才能满足这些情况. (2认同)
  • 房间里也没有人会说法语. (2认同)
  • 感谢您在空洞的事实之后花半个小时浏览维基百科。贝尔坦是个十足的淑女男人。希望数学极客们能找到他的爱情方程式。 (2认同)

ken*_*ytm 20

一个属性any是它的递归定义

any([x,y,z,...]) == (x or any([y,z,...]))
Run Code Online (Sandbox Code Playgroud)

这意味着

x == any([x]) == (x or any([]))
Run Code Online (Sandbox Code Playgroud)

对于任何xif和only if any([])被定义为False ,该等式是正确的.类似的all.


Wee*_*ble 9

我相信all([])==True通常难以掌握,所以这里有一些例子,我认为这种行为显然是正确的:

  • 如果电影中的所有对话都有字幕,则电影适合听力障碍.没有对话的电影仍然适合听力障碍.
  • 所有内部灯都关闭时,没有窗户的房间很暗.里面没有灯,天黑了.
  • 所有液体都装在100ml瓶中时,您可以通过机场安全.如果您没有液体,您仍然可以通过安检.
  • 如果包中的所有物品都比插槽窄,则可以将软包穿过狭窄的插槽.如果包是空的,它仍然可以穿过插槽.
  • 任务已准备好在满足所有先决条件后启动.如果任务没有先决条件,则可以启动.

  • 更准确的说法是,当房间内的*任何*灯打开时,无窗的房间就会被照亮。 (2认同)

Joh*_*ooy 5

我认为它们是以这种方式实施的

def all(seq):
    for item in seq:
        if not item:
            return False
    return True

def any(seq):
    for item in seq:
        if item:
            return True
    return False
Run Code Online (Sandbox Code Playgroud)

虽然不确定它们是那样实现的