【问题标题】:list object created by map,filter returns empty list [duplicate]地图创建的列表对象,过滤器返回空列表[重复]
【发布时间】:2020-05-09 20:21:53
【问题描述】:
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


    【解决方案1】:

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

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

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

    map 对象也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多