【问题标题】:resolving map function issue in python 3 vs python 2解决python 3 vs python 2中的地图功能问题
【发布时间】:2017-08-14 16:25:51
【问题描述】:

我对使用 python 进行函数式编程很感兴趣,并且正在阅读 Mary Rose Cook 的博文A practical introduction to functional programming。

显然,它是用 python 2 编写的:

name_lengths = map(len, ["Mary", "Isla", "Sam"])

print name_lengths
# => [4, 4, 3]

在 Python 3 中会产生这样的结果:

<map object at 0x100b87a20>

我有两个问题:

  1. 为什么会这样?
  2. 除了converting the map object to a list and then use numpy,还有其他解决方案吗?

【问题讨论】:

    标签: python python-3.x python-2.7 functional-programming


    【解决方案1】:

    如文件所述,在migration guide,

    在 Python 2 中 map() 返回一个列表,而在 Python 3 中它返回一个迭代器。

    Python 2:

    将函数应用于每个可迭代项并返回结果的列表。

    Python 3:

    返回一个迭代器,它将函数应用于可迭代的每个项目,并产生结果。

    Python 2 总是与list(imap(...)) 等效,Python 3 允许惰性求值。

    【讨论】:

      【解决方案2】:

      为了补充@dhke 的出色答案(评论太长了),请这样想。您想通过组合map、filter 等对列表执行多个转换。因此有两种方法可以考虑:

      1. 将第一个转换应用于整个列表,然后是第二个,依此类推。
      2. 将所有转换应用于列表的第一个元素,然后是第二个元素,依此类推。

      python3 方式允许任一种方式,而第二种方式不能在 python 2 中简洁地编写:您必须使用 for 循环显式迭代列表并建立一个新的结果列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-24
        • 1970-01-01
        • 1970-01-01
        • 2020-08-29
        • 1970-01-01
        • 2015-12-07
        相关资源
        最近更新 更多