python-3.x - 地图创建的列表对象,过滤器返回空列表
问题描述
from functools import reduce
>>> numbers = [1,2,3,4,5,6]
>>> odd_numbers = filter(lambda n: n % 2 == 1, numbers)
>>> squared_odd_numbers = map(lambda n: n * n, odd_numbers)
>>> total = reduce(lambda acc, n: acc + n, squared_odd_numbers)
如果我想检查奇数的内容,我运行
list(odd_numbers)
但是,这会返回一个空列表 []。这是python 3.6+
如果我在运行过滤器功能后立即运行 list(odd_numbers) 。我得到了列表元素
>>> numbers = [1,2,3,4,5,6]
>>> odd_numbers = filter(lambda n: n % 2 == 1, numbers)
>>> list(odd_numbers)
[1, 3, 5]
为什么会发生这种情况?
解决方案
从过滤器返回的对象就像一个迭代器;你只能迭代一次:
>>> x=[1,2,3,4,5,6]
>>> odds=filter(lambda n: n%2 == 1, x)
>>> list(odds)
[1, 3, 5]
>>> list(odds)
[]
它在你第一次循环之后“用完”(这发生在 map() 行中)。
对象也是如此map
。
推荐阅读
- c - C语言指针相关问题
- extjs - 如何知道视图模型中的数据是否已更改?
- javascript - 未捕获的类型错误:无法读取未定义的属性“框架”-PHASER3
- react-native - 更改边框颜色文本输入当它在反应原生时为空
- javascript - 如果我需要按 {entry.heat) 排序,beolw JS 的排序如何?
- networking - Proxmox 虚拟机无法访问互联网
- javascript - Javscript 按最小字段分组
- python - Python:递归阶乘
- php - 如何将字符串转换为指向数组中的值
- javascript - 如何使用 useState 挂钩按索引更新数组?