如何在Python中指定map中的参数?

时间:2012-10-30 06:32:34

标签: python map functional-programming

我可以在地图中指定其他参数吗?

例如,我有以下代码:

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方式进行。

5 个答案:

答案 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 comprehensiongenerator 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