Python all()方法

Python all()方法,python,Python,我想知道下面的结果是如何产生的。没有一个条件是真的 有什么意见吗 >>> listitem=['a','h','o','t'] >>> valid_compare_diff ['0', '1', '2', '3', '4'] >>> all(x for x in listitem if x in valid_compare_diff) True 新变化:- >>> listitem=['0'] >>> v

我想知道下面的结果是如何产生的。没有一个条件是真的

有什么意见吗

>>> listitem=['a','h','o','t']
>>> valid_compare_diff
['0', '1', '2', '3', '4']
>>> all(x for x in listitem if x in valid_compare_diff)
True
新变化:-

>>> listitem=['0']
>>> valid_compare_diff
['0', '1', '2', '3', '4']
>>> all(x for x in listitem if x in valid_compare_diff)
True

当列表理解产生结果时,结果为何仍然为真?

理解将为空,因为没有
x
的值满足以下条件:

如果x在有效\u比较\u差异中

因此:

>>> [x for x in listitem if x in valid_compare_diff]
[]
结果为
[]
,当传递到
all
时,返回
True

>>> all([])
True
这是因为
all
的定义指出,如果传递给它的iterable为空,则返回
True

all(...)
    all(iterable) -> bool

    Return True if bool(x) is True for all values x in the iterable.
    If the iterable is empty, return True.

正如Henny所说,您的集合是空的,因为您只查看那些已经填充了您的条件的值

如果检查通过,您希望返回检查结果,而不是元素:

all(x in valid_compare_diff for x in listitem)
使用
(如果x在有效的比较中,则x代表列表项中的x)
,您将获得属于
有效的比较中的所有
列表项的值(在您的情况下,无)

使用
(列表项中x的x为有效比较中的x)
,对于每个
x
,您获取表达式
(x为有效比较中的x)
,为每个
x
提供一个
bool

(x for x in listitem if x in valid_compare_diff)

表示“从
列表项
收集所有
x
中也在
valid\u compare\u diff
中的
x
。通过
all()
传递这些信息只会关心那些你选择的
x
s,因此它将是
True
,除非你至少选择了一个falsy
x
——它一开始并不关心(甚至不知道)你是如何选择那些
x

清晰、简洁、正确。我想补充一点,这很有道理。这也是“所有人”在数学中的行为方式。“所有10英尺高的鸡都喜欢跳舞”,因为没有10英尺高的鸡,它们都喜欢跳舞。这叫做空洞的真理@BenjaminGruenbaum谢谢你的见解,明天有机会我会读这篇文章。你能解释一下我的新变化吗?…all(['0'])和all([])都会产生True。根据python教程,只有iterable为空时才会产生True。@user1050619不仅仅是if,只是if
all(iterable)
为False,当且仅当iterable至少有一个False值。