首页 > 解决方案 > 地图创建的列表对象,过滤器返回空列表

问题描述

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]

为什么会发生这种情况?

标签: python-3.x

解决方案


从过滤器返回的对象就像一个迭代器;你只能迭代一次:

>>> x=[1,2,3,4,5,6]
>>> odds=filter(lambda n: n%2 == 1, x)
>>> list(odds)
[1, 3, 5]
>>> list(odds)
[]

它在你第一次循环之后“用完”(这发生在 map() 行中)。

对象也是如此map


推荐阅读