По существу, map
с несколькими итерациями для аргументов будет zip
итерациями, а затем вызывает функцию с кортежами из zip
как var-args. Таким образом, вы можете получить то же поведение, используя itertools.starmap
и 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
на itertools.zip_longest
:
>>> from itertools import starmap, zip_longest
>>> list(starmap(f, zip_longest(a, b)))
[10, 20, None]
Обе функции из itertools
также существуют в Python 2, за исключением того, что вторая называется izip_longest
. Вы можете просто import ... as ...
обойти это.