我正在回答this question并面临以下问题:
>>> 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]
但是,为什么呢?他们的行为不应该一致吗?
这是解决问题的最佳方法吗?
答案 0 :(得分:4)
如itertools.imap
说明中所述:
创建一个迭代器,使用每个迭代的参数计算函数。如果function设置为None,则imap()将参数作为元组返回。 与map()类似,但在最短的iterable耗尽时停止,而不是为更短的iterables填充None。差异的原因是无限迭代器参数通常是map()的错误(因为输出被完全评估),但代表了向imap()提供参数的常用且有用的方法。
答案 1 :(得分:2)
怎么样:map(sum, zip([1,2,3],[4,5]))
?