3

我正在回答这个问题并面临以下问题:

>>> from operator import add
>>> map(add,[1,2,3],[1,2])

Traceback (most recent call last):
  File "<pyshell#47>", line 1, in <module>
    map(add,[1,2,3],[1,2])
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

我想map在参数中提供的最小迭代器被消耗后立即停止。

我找到了解决方案:

>>> from itertools import imap
>>> list(imap(add,[1,2,3],[1,2]))
[2, 4]

但是,这是为什么呢?他们的行为不应该是一致的吗?

这是我解决问题的最佳方法吗?

4

2 回答 2

4

如描述中所述itertools.imap

创建一个迭代器,使用来自每个可迭代对象的参数计算函数。如果 function 设置为 None,则 imap() 将参数作为元组返回。与 map() 类似,但在最短的可迭代对象用尽时停止,而不是为较短的可迭代对象填充 None。差异的原因是无限迭代器参数通常是 map() 的错误(因为输出已被完全评估),但代表了向 imap() 提供参数的一种常见且有用的方式。

于 2012-11-12T17:19:30.883 回答
2

怎么样:map(sum, zip([1,2,3],[4,5]))

于 2012-11-12T17:46:41.623 回答