Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不同长度迭代器上的映射_Python_Python 2.7_Itertools - Fatal编程技术网

Python 不同长度迭代器上的映射

Python 不同长度迭代器上的映射,python,python-2.7,itertools,Python,Python 2.7,Itertools,我在回答时遇到了以下问题: >>> 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 +

我在回答时遇到了以下问题:

>>> 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'
但是,为什么呢?他们的行为不应该是一致的吗

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

如描述中所述:

制作一个迭代器,使用每个Iterable的参数计算函数。如果函数设置为“无”,则imap()将参数作为元组返回与map()类似,但当最短的iterable用完时停止,而不是为较短的iterable填充None。产生差异的原因是无限迭代器参数通常是map()的错误(因为输出是完全计算的),但它代表了向imap()提供参数的一种常见且有用的方法。


关于:
地图(sum,zip([1,2,3],[4,5])

我明白了。他们甚至在文档中反映了这一点!!!(我在10分钟内接受这个答案,如果SO允许的话)。也许你可以试着回答最后一个问题?如果你想要两个列表中最短的,那么是的,使用
imap
是完全合理的。失败的不是map,而是
add()
函数
add()
要求您可以添加这两种类型,不能将
NoneType
添加到
int
中。您可以定义自己的函数来处理
None
,map可以处理不同长度的列表。@Matt我希望它在使用最小的迭代器时立即停止。这是可以接受的,您可以这样做。但我指的是你问题中提到的当参数列表长度不同时,
映射失败的地方,这是不正确的
map()
可以很好地处理不同长度的列表,错误是由
add()
函数引起的。@Matt我还提供了指向我所面临的实际问题的链接(从中可以看出我对什么不满)。另外,我问了几个问题,其中一个问题是
map
imap
的行为是否应该一致。我试图想出一个简短的失败例子,首先想到的是使用
add
。我无法预见,您会将不当行为归因于
add
不接受
None
。因此,我更新了问题,并明确表示,我希望
map
在使用最小的迭代器时立即停止。是的,我知道您想要做什么。我没有回答你的问题,已经有一个很好的答案了。我只是指出一个地方,你问题中的措辞并不完全正确。在您的示例中有一个例外。该异常由
add()
函数引发。我将您的“映射失败时…”解释为引用该异常,因为这是我唯一看到的“失败”。我的评论是关于您错误地将该异常归因于
map()
,而实际上是由
add()
引发的
map()
不是“失败”,它正在做它应该做的事情。我认为这更好,因为它不需要导入
imap
>>> from itertools import imap
>>> list(imap(add,[1,2,3],[1,2]))
[2, 4]