本质上,map
参数有多个可迭代对象将zip
iterables,然后使用来自的元组调用该函数zip
作为 var-args。因此,您可以使用以下命令获得相同的行为itertools.starmap https://docs.python.org/3/library/itertools.html#itertools.starmap and zip
:
>>> a = [10, 20]
>>> b = [1, 2, 3]
>>> f = lambda x, y: x
>>> list(map(f, a, b))
[10, 20]
>>> from itertools import starmap
>>> list(starmap(f, zip(a, b)))
[10, 20]
然后你想要的行为可以通过替换来实现zip
with itertools.zip_longest https://docs.python.org/3/library/itertools.html#itertools.zip_longest:
>>> from itertools import starmap, zip_longest
>>> list(starmap(f, zip_longest(a, b)))
[10, 20, None]
两个函数均来自itertools
Python 2 中也存在,只不过第二个名为izip_longest https://docs.python.org/2/library/itertools.html#itertools.izip_longest反而。你可以只import ... as ...
来解决这个问题。