python中all()的行为

时间:2015-12-09 10:20:29

标签: python python-3.x built-in

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

all()的文档读取它返回True是所有元素都是True /对于一个空列表。 为什么所有( [[]] )评估为False? 由于 [] [[]] 的成员,因此它也应该评估为True。

3 个答案:

答案 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