2012-10-18 3 views
3

, 하나 같이 내장 함수 map()를 사용하여 목록의 모든 요소에 함수 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

는 파이썬에서 가능

내가 좋아하는 뭔가를 할 수 있도록하고 싶습니다? 모든 요소에 'y'을 추가하는 특정 예제에 대한 대안이있을 수 있습니다. 그러나 map()을 사용할 답변을 찾고 있습니다.

답변

6

람다 함수를 사용할 수 있습니다. 이 함수는 일반적인 함수처럼 취급되며, 이터레이터의 매개 변수는 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] 
>>> 

또 다른 방법은 당신이 정의하는 방식을 변경하는 것입니다 함수 :

덧붙여 말하면, lambda을 사용하면 가장 직선이됩니다. 이것을 수행하는 방법은 Paolo Moretti said입니다. 당신이 설명한 방식으로 map()을 사용해야하는 특별한 이유가 있습니까?

+0

와우! 나는이 방법을 정말 좋아한다. 나는 전에 그들을 보거나 보지 못했다. 파이썬 2.6을 사용하고 있습니까? 그 버전에서 사용할 수 있습니까? –

+0

@InbarRose : 예. 그들은 2.6에서 작동합니다. –

+0

Joel, 부분적으로도 작동했습니다. :) – prashu

관련 문제