-1

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

例如,我有以下代码:

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方式做到这一点。

4

5 回答 5

5

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)
于 2012-10-30T06:37:57.530 回答
3

您正在寻找functools.partial,用于实现部分应用程序

ll = map(functools.partial(f, 2), l)

请注意,在许多情况下,列表推导式生成器表达式更具可读性:

ll = [f(2, x) for x in l]
于 2012-10-30T06:41:10.833 回答
1

你不应该使用map()这个,而是列表理解:

new_lst = [f(x, other_value) for x in lst]

另一种选择是 lambda。但不要这样做:

new_lst = map(lambda x: map(x, other_value), lst)
于 2012-10-30T06:35:25.467 回答
0

你也可以考虑:-

def f(a):
    return a + b
l = [1, 2, 3]
b = 2
ll = map(f,l)

print ll
于 2012-10-30T06:58:27.290 回答
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
于 2014-02-26T21:05:45.917 回答