python 中 all() 的行为

Behaviour of all() in python

>>all([])
True
>>all([[]])
False
>>all([[[]]])
True
>>all([[[[]]]])
True

all() 的文档显示它 returns 是的,所有元素都是 True/For 一个空列表。 为什么 all([ [ ] ]) 的计算结果为 False? 因为 [ ][ [ ] ] 的成员,它的计算结果也应该为 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.

这解释了行为。 [] 是一个空的可迭代对象,因此 all return 为真。但是 [[]] 而不是 一个空的可迭代对象;它是一个包含一个项目的可迭代对象,一个空列表。在那个空列表上调用 bool returns False;所以整个表达式都是假的。

其他例子returnTrue 因为单项不再为空,所以是boolean True。

>>all([])
True

因为列表中的所有可迭代项都是 True(虽然有零个可迭代项)

>>all([[]])
False

有一个空的可迭代对象(最里面的空列表),其计算结果为 False

>>all([[[]]])
True

此处唯一的可迭代对象 ([[]]) 内部有一个空列表,因此计算结果为 True

>>all([[[[]]]])
>>True

同上

Python 中的列表当且仅当它们不为空时才计算为 True(参见 this)。

all returns True 当且仅当其参数的每个元素的计算结果为 True.

对于第一个例子,你的列表是空的,all returns True.

在第二个例子中,列表的唯一元素是一个空列表,计算结果为 False,因此 all returns False.

对于所有其他示例,列表的唯一元素包含更多列表,因此不为空且计算结果为 True,因此 all 必须 return True.