>>all([])
True
>>all([[]])
False
>>all([[[]]])
True
>>all([[[[]]]])
True
all()的文档读取它返回True是所有元素都是True /对于一个空列表。 为什么所有( [[]] )评估为False? 由于 [] 是 [[]] 的成员,因此它也应该评估为True。
答案 0 :(得分:12)
all
的文档字符串如下:
all(iterable) -> bool
如果bolable(x)对于iterable中的所有值x都为True,则返回True。 如果iterable为空,则返回True。
这解释了这种行为。 []
是一个空的可迭代,因此all
返回True。但是[[]]
不是一个空的可迭代;它是一个包含一个项目的可迭代项,一个空列表。在该空列表上调用bool
返回False;所以整个表达式都是假的。
其他示例返回True,因为单个项不再为空,因此它是布尔值True。
答案 1 :(得分:2)
>>all([])
True
因为列表中的所有迭代都是True(尽管有零迭代)
>>all([[]])
False
有一个空的可迭代(最里面的空列表),它将评估为False
>>all([[[]]])
True
这里唯一的可迭代([[]]
)里面有一个空列表,因此评估为True
>>all([[[[]]]])
>>True
与上述相同
答案 2 :(得分:2)
当且仅当它们不为空时,Python中的列表才会评估为Entity
(例如,请参阅this)。
True
当且仅当其参数的每个元素评估为all
时才返回True
。
对于第一个示例,您的列表为空,True
返回all
。
在第二个示例中,列表的唯一元素是一个空列表,其值为True
,因此False
返回all
。
对于所有其他示例,列表的唯一元素包含更多列表,因此不为空并且评估为False
,因此True
必须返回all
。