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)
提前致谢!
有没有必要使用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)
zip取n 个可迭代对象,并生成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)