在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()
的答案。
答案 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()
的任何特定原因吗?