【问题标题】:map a binary function over pairs of lists in Python 3 [duplicate]在 Python 3 中的列表对上映射二进制函数 [重复]
【发布时间】:2017-12-21 03:46:35
【问题描述】:

我为什么要进入 Python2

>>> map(max,[1,2],[3,1])
[3, 2]

在 Python3 中

>>> map(max,[1,2],[3,1])
<map object at 0x10c2235f8>

?

在 Python3 中应该用什么替换 map(max,[1,2],[3,1])

我读到应该在 Python3 中使用列表推导,但是

>>> [max(i,j) for i in [1,2] for j in [3,1]]
[3, 1, 3, 2]

没有给出想要的结果,想到的变化也没有。

【问题讨论】:

  • @Dark 从技术上讲,不是生成器,只是一个迭代器。
  • list-comp: [max(i, j) for i, j in zip([1,2], [3,1])].
  • @ekhumoro:谢谢这很优雅。 python 程序员对这两种解决方案(使用列表还是使用 zip 和理解)哪个更合适有意见?
  • @AlexanderKurz。可能有一些讨论相对性能的问题。否则,这实际上只是个人品味或房屋风格的问题(甚至只是在当前代码上下文中“看起来正确”)。

标签: python python-3.x


【解决方案1】:

这是因为Python2 为多个返回值返回一个List

来自Pydoc[2]

如果有多个参数,map() 会返回一个列表,其中包含 包含来自所有可迭代项的相应项的元组(一种 转置操作)。可迭代的参数可以是一个序列或 任何可迭代对象;结果总是一个列表。

Python3 返回Iterable

来自Pydoc[3]

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


所以要在Python3 中获取list,只需这样做:

list(map(...))

基本上:

>>> list(map(max,[1,2],[3,1]))
=> [3, 2]

【讨论】:

  • 谢谢...python 程序员对这两种解决方案(使用列表还是使用 zip 和理解)中的哪一种更可取有意见?
  • 上述解决方案是首选方式,因为您可以使用 .next 来使用可迭代本身而不是使用列表,并且代码更短且更易于阅读。
猜你喜欢
  • 1970-01-01
  • 2015-11-16
  • 2018-11-13
  • 2018-06-26
  • 2016-07-01
  • 2014-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多