3

在 Python 中,可以foo()使用内置函数将函数应用于列表的每个元素,map()如下所示:

def foo(x):
  return x*x

print map(foo, [1, 2, 3, 4])

这将打印出来,就像人们猜到的那样:1 4 9 16。

假设该函数foo()现在接受两个参数而不是一个参数,并且定义如下:

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

在这种情况下,x 是列表的一个元素,y 是某个数字,对于整个列表都是相同的。在这种情况下,我们如何使用 map() 以便将 foo() 应用于列表的每个元素,同时采用另一个对每个元素都相同的参数 y?

我希望能够做类似的事情:

print map(foo(:, 5), [1, 2, 3, 4])

这应该给我:6 7 8 9。

在 Python 中可能吗?对于这个添加'y'到所有元素的特定示例,可能有其他选择。但我正在寻找一个可以使用的答案map()

4

2 回答 2

6

您可以使用 lambda 函数。这就像一个普通函数一样处理,x值是迭代器的参数,x+5在这种情况下返回值。

>>> def foo(x, y)
...   return x + y
...
>>> l = [1, 2, 3, 4]
>>> map(lambda x: foo(x, 5), l)
[6, 7, 8, 9]

作为记录,@PaoloMoretti 在我面前有这个:)

于 2012-10-18T08:52:00.933 回答
5

一种方法是使用functools.partial

>>> from functools import partial
>>> def foo(x, y):
...     return x + y
... 
>>> l = [1, 2, 3, 4]
>>> map(partial(foo, y=2), l)
[3, 4, 5, 6]
>>> 

另一种方法是更改​​定义函数的方式:

>>> def foo(y):
...     def inner(x):
...         return x + y
...     return inner
... 
>>> map(foo(2), l)
[3, 4, 5, 6]
>>> 

顺便说一句,正如Paolo Moretti 所说lambda,使用将是最直接的方法。您必须使用您描述的方式的任何特殊原因?map()

于 2012-10-18T08:58:16.677 回答