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
,除非你至少选择了一个falsyx
——它一开始并不关心(甚至不知道)你是如何选择那些x
的 清晰、简洁、正确。我想补充一点,这很有道理。这也是“所有人”在数学中的行为方式。“所有10英尺高的鸡都喜欢跳舞”,因为没有10英尺高的鸡,它们都喜欢跳舞。这叫做空洞的真理@BenjaminGruenbaum谢谢你的见解,明天有机会我会读这篇文章。你能解释一下我的新变化吗?…all(['0'])和all([])都会产生True。根据python教程,只有iterable为空时才会产生True。@user1050619不仅仅是if,只是ifall(iterable)
为False,当且仅当iterable至少有一个False值。