Rag*_*rok 2 python generator any
我在评估生成器表达式时遇到了一个奇怪的问题。
我的代码有一个测试几个条件的生成器表达式。我们称之为“gen_ex”。如果我把它变成一个列表来查看输出:
print(list(gen_ex))
Run Code Online (Sandbox Code Playgroud)
我明白了:
[False, False, False, False, True, True, False, False, False]
Run Code Online (Sandbox Code Playgroud)
但是,当我对其使用 any() 和 all() 时,会得到意想不到的结果。
any(gen_ex)
Run Code Online (Sandbox Code Playgroud)
返回 False,而:
all(gen_ex)
Run Code Online (Sandbox Code Playgroud)
返回真。
这应该是预期的行为吗?还是幕后发生了什么奇怪的事情?
生成器不能迭代多次。第一次调用list消耗所有值。
>>> gen_ex = (x for x in (1,2,3))
>>> list(gen_ex)
[1,2,3]
>>> list(gen_ex)
[]
Run Code Online (Sandbox Code Playgroud)
因此,any和all都看到了一个空的值序列。您看到的返回值是基本情况:
any([])是False因为列表中没有 True 元素(即,参数中的元素不为真True)all([])是True因为在列表中不存在任何虚假元素(即,这是事实,列表中的每一个元素是True,因为是没有元素)