2012-10-18 67 views
3

在Python,人們可以通過使用內置函數map()作爲應用功能foo()到列表中的每個元素如下:如何從Python中的內置函數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()的答案。

回答

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有這個在我:)之前

+0

正如我所說,可能有其他選擇。我正在尋找一個可以在map()的幫助下調用函數foo()的答案。 – prashu

+0

@prashu啊,我明白你在說什麼了。如果我不能很快想到其他東西,我會刪除它。 – RocketDonkey

+0

@RocketDonkey:正如我在我的問題中提到的,這是執行OP所說的首選方式。我會放棄它。 「應該有一個 - 而且最好只有一個 - 明顯的做法。」這就是它。 –

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()

+0

哇!我真的很喜歡這些方法。我從未聽過或見過他們。我正在使用Python 2.6是否可以在該版本中使用? –

+0

@InbarRose:是的。他們在2.6工作。 –

+0

謝謝喬爾,部分事情也工作:) – prashu

相關問題