我可以在地图中指定其他参数吗?
例如,我有以下代码:
def f(a, b):
return a + b
l = [1, 2, 3]
ll = map(f, l)
如何为上面的map
提供一个参数,以便ll
的每个元素都是l
中一个元素和给定参数的总和?
例如,如果我可以使用map(f(2,), l)
之类的内容,我会得到[3, 4, 5]
。
我知道我可以通过列表理解或for循环获得相同的结果,但我只是想知道是否可以map
方式进行。
答案 0 :(得分:4)
map
本身并没有直接提供这样做的方法。但是,您可以使用functools.partial
预先指定静态参数来执行此操作:
>>> def add(x, y):
... return x+y
>>> map(functools.partial(add, y=10), [1, 2, 3])
[11, 12, 13]
然而,正如@jamylak在评论中所说,没有理由这样做。如果您不想存储结果,只需执行常规for循环:
for item in [1, 2, 3]:
add(item, 10)
答案 1 :(得分:3)
您正在寻找functools.partial
,用于实施partial application:
ll = map(functools.partial(f, 2), l)
请注意,在许多情况下,list comprehension或generator expression更具可读性:
ll = [f(2, x) for x in l]
答案 2 :(得分:1)
你不应该使用map()
,而是列表理解:
new_lst = [f(x, other_value) for x in lst]
另一种选择是lambda。但不要这样做:
new_lst = map(lambda x: map(x, other_value), lst)
答案 3 :(得分:0)
你也可以考虑: -
def f(a):
return a + b
l = [1, 2, 3]
b = 2
ll = map(f,l)
print ll
答案 4 :(得分:0)
这是你想要的:
listA=[1,2,3]
def f(a,b=2):
return a+b
result = map(f,listA)
print result
或者如果两个列表中的项目数相同,则可以执行以下操作:
listA=[1,2,3]
listB=[2,2,2]
def f(a,b):
return a+b
result = map(f,listA,listB)
print result