我在计算生成器表达式时遇到了一个奇怪的问题。
我的代码有一个生成器表达式,用于测试一些条件。我们称之为"gen_ex"。如果我将其转换为列表以查看输出:
print(list(gen_ex))
我明白这个:
[False, False, False, False, True, True, False, False, False]
但是,当我在其上使用any((和all((时,我得到了意想不到的结果。
any(gen_ex)
返回 False,而:
all(gen_ex)
返回 True。
这应该是预期的行为吗?还是幕后发生了一些奇怪的事情?
生成器不能多次迭代。对list
的第一次调用会消耗所有值。
>>> gen_ex = (x for x in (1,2,3))
>>> list(gen_ex)
[1,2,3]
>>> list(gen_ex)
[]
因此,any
和all
也都看到了空的值序列。您看到的返回值是基本情况:
any([])
False
因为列表中没有 True 元素(即,参数中的元素计算结果为True
不是真的(all([])
True
因为列表中没有 False 元素(即,列表中的每个元素都是True
的,因为没有元素(