2016-06-21 2 views
2

람다 함수 목록이 있습니다.n 개의 람다 함수의 합

f = lambda x: x + x**2 + x**3 + ... + x**n 

어떤 방법이 있나요 : 나는 그래서 이런 기능이 줄을 요약 할 수 있어야합니다 매 n은이 일

l = [lambda x:x**i for i in range(n)] 

을 말할 수?

편집 : 명확하지 않았습니다. 나는 그 기능들에 대해 아무것도 모릅니다.

+0

무한한가요? 유한 한가요? 유한 한 경우 x ** n에서 끝나나요? 그것은 합산되어야합니까, 아니면 수학 공식 지름길을 받아 들일 수 있습니까? –

+0

@RoryDaulton 유한 양입니다. 어떤 n에 대해서도이 합계를 가질 수 있어야합니다. 예 x ** n에서 멈 춥니 다. 편집 됨, 감사합니다. – UpmostScarab

+0

[lambda가 변수를 덮는 방법]주의하십시오 (http://stackoverflow.com/questions/10452770/python-lambdas-binding-to-local-values). 여기서'l'은 모두'i'와 같은 값을 가진 람다 목록입니다. –

답변

3

이 솔루션을 찾으십니까?

파이썬 3.x를 :

n = 5 
g = lambda y: sum( f(y) for f in (lambda x: x**i for i in range(n)) ) 
print(g(5)) # 781 

파이썬 2.x는 : 당신이 x**n까지 유한 합을 의미하는 경우

n = 5 
g = lambda y: sum( f(y) for f in (lambda x: x**i for i in xrange(n)) ) 
print g(5) # 781 
+0

내가 무슨 뜻인지 잘 모르겠다. 설명 해주십시오? – advance512

+1

이 방법은 실제로 내 문제를 해결했습니다. 감사! – UpmostScarab

+0

@MosesKoledoye 이것은 실제로 "위험"을 피합니다 : P. 람다는 생성자 표현식으로 만들어지며'sum()'을 제공하는 다른 생성자 표현식에서 사용되어 하나의 람다가 생성되어 사용이 끝나면 사라집니다. –

3

는, 수학 바로 가기를 사용

f = lambda x: (x**(n+1) - 1)/(x - 1) if x != 1 else n 
+0

내 기능이 어떻게 작동하는지 모르겠으니 그렇게 할 수 없습니다. – UpmostScarab

+0

@UpmostScarab https : //en.wikipedia.org/wiki/Geometric_series # 수식 – zezollo

2
f = lambda x,n: sum(x**i for i in range(n)) 

print f(3,4) 

>> 40 
+3

목록 대신 생성기 식을 사용하는 것이 더 좋습니다 –

+0

다양한 익명 lambdas를 만들고 싶지 않은 경우이 방법이 더 좋으며 성능에 신경 쓰면이 방법을 사용합니다. 내 솔루션은 많은 lambdas를 사용하며, 학문적 인 숙제와 관련이있을 수 있습니다. – advance512

+0

역시 그렇습니다. 감사! – UpmostScarab

0

이 작업을 수행하는 가장 간단한 방법은 c 람다 함수의 목록을 reating하고, 대신 하나의 함수를 합산하는 것이다. 당신이 xn을 정의한 가정하면, 당신이 할 수 있습니다

f = lambda x, i: x**i 
sum(f(x, i) for i in range(n)) 

를 원래의 예에서, 당신은 실제로 폐쇄를 만들었습니다, 그래서 당신의 람다 함수는 그들이 생각하지 않습니다. 대신, 이들은 모두 닫음에서 i의 최종 값을 사용하기 때문에 모두 동일합니다. 그건 분명히 당신이 의도 한 것이 아닙니다.