如何从列表中传递一个参数,在Python中的内置函数map()中传递另一个参数?

时间:2012-10-18 08:49:46

标签: python

在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()的答案。

2 个答案:

答案 0 :(得分: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在我之前有这个:)

答案 1 :(得分: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]
>>> 

顺便说一句,使用lambda将是最简单的方法,如Paolo Moretti said。您必须按照描述的方式使用map()的任何特定原因吗?