类似地,“if 0 = 1 then the moon is square”为真。更一般地,“all P are Q”-如果没有P,则该语句被认为是真的,因为它可以被正式捕获为“For all x,if x is P then x is Q”。最终,这些为真,因为条件逻辑运算符(if-then)在先行词(第一个子句)为False时计算为True:“if False then True”的计算结果为True。回想一下,“if A then B”等价于“(not A)or B”。
添加了1-2022* 在all和Python列表的情况下,all(my_list)的布尔值是
"for all items `x` in `my_list`, the value of `x` is truthy".
6条答案
按热度按时间e5nqia271#
这是真的,因为对于列表中的每个元素,都是0,都等于2.
您可以将所有实现视为:
而任何一个都是:
也就是说,
all
在被证明有罪之前是无辜的,而any
在被证明无罪之前是有罪的。puruo6ea2#
“all”应用于空列表是“vacuously true”,这是很容易证实的:
类似地,“if 0 = 1 then the moon is square”为真。更一般地,“all P are Q”-如果没有P,则该语句被认为是真的,因为它可以被正式捕获为“For all x,if x is P then x is Q”。最终,这些为真,因为条件逻辑运算符(if-then)在先行词(第一个子句)为False时计算为True:“if False then True”的计算结果为True。回想一下,“if A then B”等价于“(not A)or B”。
all
和Python列表的情况下,all(my_list)
的布尔值是当
my_list
为空时,该值为True。同样,“for all”和all
没有声明存在。在Python伪代码中,
all
的工作方式大致如下:7lrncoxx3#
考虑
all
的递归定义:如果
L
中的每个元素都为真,那么L
中的第一项为真,* 和all(L[1:])
为真都必须为真。对于有几个项的列表,这很容易看出,但是对于有 * 一个 * 项的列表,情况又如何呢?显然,如果唯一的项为真,则每个项都为真。但是在这种情况下,我们的递归公式是如何工作的呢?将all([])
定义为true使算法工作。另一种看待它的方式是,对于任何
all(L)
为 not true的列表L
,我们应该能够识别至少一个不为真的元素a
。然而,当L
为空时,L
中没有这样的a
,因此我们有理由说all([])
为真。同样的参数也适用于
any
。如果any(L)
为true,我们应该能够识别L
中至少一个为true的元素。但是由于我们不能识别空列表L
,我们可以说any([])
为false。any
的递归实现支持这一点:如果
L[0]
为true,我们可以在不进行递归调用的情况下返回true,因此假设L[0]
为false。我们达到基本情况的唯一方法是如果L
中没有任何元素为true,因此如果我们达到它,我们必须返回False
。mum43rcc4#
其他答案已经很好地解释了原因。作为快速解决方案,您可以用途:
w46czmvw5#
办公室文件。
全部(可迭代)
如果iterable的所有元素都为true(或者iterable为空),则返回True。等效于:
版本2.5中的新增功能。
任意(可迭代)
如果iterable的任何元素为true,则返回True。如果iterable为空,则返回False。等效于:
版本2.5中的新增功能。
x0fgdtte6#
这是一个逻辑事实,所以谈论默认函数返回值会使问题变得模糊。
对于集合S,如果以下条件成立,则布尔值all(S)被定义为true:
“x in S =〉x is true”。
如果S为空,则该条件空成立,因此all(emptyset)= true。