作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在计算生成器表达式时遇到了一个奇怪的问题。
我的代码有一个生成器表达式来测试一些条件。我们称它为“gen_ex”。如果我把它变成一个列表来查看输出:
print(list(gen_ex))
我明白了:
[False, False, False, False, True, True, False, False, False]
但是,当我对其使用 any() 和 all() 时,我得到了意想不到的结果。
any(gen_ex)
返回 False,同时:
all(gen_ex)
返回真。
这应该是预期的行为吗?或者幕后发生了什么奇怪的事情?
最佳答案
生成器不能迭代多次。第一次调用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
是真的,因为没有没有元素)关于python - 生成器表达式和 Any/All 的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62762809/
我是一名优秀的程序员,十分优秀!