如何在python中映射具有多个参数的函数

Mat*_* W. 5 python iterator list-comprehension list

我正在寻找一个带有特定参数列表的函数。

def add(x, y):
    return(x + y)

list1 = [1, 2, 3]
list2 = [3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

经过一些研究,我已经能够成功地使用map一个lambda函数来完成它。

list(map(lambda x, y: add(x, y), list1, list2))
Run Code Online (Sandbox Code Playgroud)

我想知道,使用迭代器这样做更好吗?我尝试了以下但无法弄清楚:

[add(x, y), for x, y in list1, list2]
Run Code Online (Sandbox Code Playgroud)

或者

[add(x, y), for x in list1 for y in list2]
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Wil*_*sem 8

没有必要使用lambda表达式在这里,你可以通过直接TE功能的引用:

list(map(add, list1, list2))
Run Code Online (Sandbox Code Playgroud)

如果您想使用列表理解,您可以使用zip

[add(x, y) for x, y in zip(list1, list2)]
Run Code Online (Sandbox Code Playgroud)

zipn 个可迭代对象,并生成n个元组,其中第i个元组包含每个可迭代对象的第i个元素。

如果要为某些参数添加默认值,可以使用partialfrom functools。例如,如果您定义了一个:

def add (x, y, a, b):
    return x + y + a + b
Run Code Online (Sandbox Code Playgroud)
from functools import partial

list(map(partial(add, a=3, b=4), list1, list2))
Run Code Online (Sandbox Code Playgroud)

Here x and y are thus called as unnamed parameters, and a and b are by partial added as named parameters.

Or with list comprehension:

[add(x, y, 3, 4) for x, y in zip(list1, list2)]
Run Code Online (Sandbox Code Playgroud)