python - 生成器表达式和任何/全部的意外结果
问题描述
我在评估生成器表达式时遇到了一个奇怪的问题。
我的代码有一个生成器表达式,可以测试几个条件。我们称之为“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
因为没有元素)
推荐阅读
- sql - 使用 alter 命令在数据库级别永久关闭 ANSI_WARNINGS 不起作用
- java - 如何使用拖动器 2 创建一个带有模拟数据的单例类?
- python - python中的加密货币相关性,使用字典
- c# - 如何使用反射将类型对象转换为 C# 中的列表。我可以访问对象中的属性,但不能访问值,有什么建议吗?
- stenciljs - TestWindow 不是 Stenciljs 单元测试中的构造函数
- ios - 无法从 iOS 中的“MyFiles”附加和发布 pdf 文件
- highcharts - 使用轴类型“类别”时,与 x 轴相反的 Highcharts 人口金字塔未正确标记
- c# - C# - 使用 WMI 获取带有友好名称的 COM 端口
- ssl - 在 IIS 中部署应用程序
- ksqldb - 来自流主题(Json 格式)的新流,没有任何数据