Python检查所有空列表中的条件

时间:2013-03-18 10:48:43

标签: python

这是正常行为吗?

answer=all(c=='false True answer?' for c in [])
# answer = True

如果我想在空列表中使用“all”检查值时使用False以使用这样的行吗?

answer=all(set([c=='a' for c in []]) or [False,])

看起来没问题:

answer=all(set([c=='a' for c in ['a','a']]) or [False,])
answer=all(set([c=='a' for c in ['a','b']]) or [False,])

我决定使用反向逻辑,例如:

bad_answer=bool([c for c in ['a','b'] if c!='a'])

4 个答案:

答案 0 :(得分:3)

In [2]: all([])
Out[2]: True

c == '...'永远不会被评估,因为for c in []不承认任何项目。当[]中的iterable为空时,列表理解会立即评估为for c in iterable

答案 1 :(得分:3)

您正在检查空列表的所有元素是否等于某个值。由于列表中没有值,因此技术上所有值 都等于其他值。

>>> all([])
True
如果任何表达式评估为all,则

False会返回False,否则会返回True。因为没有条件不正确(因为首先没有条件),all会返回True

答案 2 :(得分:2)

all() is documented

  

如果iterable的所有元素都为真(或者如果是),则返回True   iterable是空的。)

您的生成器表达式c=='false True answer?' for c in []为空,因为它遍历空列表。比较永远不会发生,因为没有in []

答案 3 :(得分:1)

在空序列上操作时,

all始终评估为True。所以,是的,这是正常的。