Python n个lambda函数之和
我有一个lambda函数列表。就说这个吧Python n个lambda函数之和,python,python-3.x,Python,Python 3.x,我有一个lambda函数列表。就说这个吧 l = [lambda x:x**i for i in range(n)] 对于每个n,我需要能够求和,所以我有一个这样的函数: f = lambda x: x + x**2 + x**3 + ... + x**n 有办法吗 编辑:我不清楚。我对这些功能一无所知。这就是您要寻找的解决方案吗 Python3.x: n = 5 g = lambda y: sum( f(y) for f in (lambda x: x**i for i in range
l = [lambda x:x**i for i in range(n)]
对于每个n,我需要能够求和,所以我有一个这样的函数:
f = lambda x: x + x**2 + x**3 + ... + x**n
有办法吗
编辑:我不清楚。我对这些功能一无所知。这就是您要寻找的解决方案吗 Python3.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
Python2.x:
n = 5
g = lambda y: sum( f(y) for f in (lambda x: x**i for i in xrange(n)) )
print g(5) # 781
如果您指的是有限和,最多为
x**n
,请使用数学快捷方式
f = lambda x: (x**(n+1) - 1) / (x - 1) if x != 1 else n
最简单的方法是避免创建lambda函数列表,而是对单个函数求和。假设已定义了
x
和n
,则可以执行以下操作:
f = lambda x, i: x**i
sum(f(x, i) for i in range(n))
在最初的示例中,您实际上创建了一个闭包,因此lambda函数不会执行您认为它们会执行的操作。相反,它们都是相同的,因为它们都在闭包中使用
i
的最终值。那当然不是你想要的。那是无限和还是有限和?如果是有限的,它是否在x**n处结束?是必须求和,还是可以接受一个数学公式?@RoryDaulton这是一个有限和。我需要能够得到任意n的这个总数。是的,它停在x**n。编辑好了,谢谢。小心怎么做。这里的l
将是一个lambda列表,所有lambda共享相同的i
值。请注意范围(n)=[0,1,2,3,…,n-1]
。所以你会得到:x^0+x^1+x^2+…+x^(n-1),而不是x^1+x^2+x^n。如果这不是您想要做的,您可能希望在代码中更改它。我不知道我的函数如何运行,所以我不能这样做。最好使用生成器表达式而不是列表如果您不想创建各种匿名lambda,这是一个更好的解决方案,如果我关心性能,我会使用它。我的解决方案使用了许多lambda,因此可能与学术“家庭作业”等更相关。这不起作用。指数是总和的变化,而不是x。我不知道你的意思。请解释一下?@MosesKoledoye这实际上避免了“危险”:P.lambda构建在一个生成器表达式中,并在另一个提供sum()
的生成器表达式中使用,因此生成一个lambda,并使用完,就这样。@IljaEverilähumore me。谢谢你。说句公道话,@IljaEverilä,起初代码使用的是range(n)而不是xrange(n),因为我是根据原始问题的副本编写的。:)话虽如此,我仍然不知道在原始版本中它会是一个什么问题。@advance512它不会是一个问题。顺便说一句,使用range()
将是正确的,因为问题已标记。
n=5
xpower=[]
for i in range(n):
xpower.insert(i, i+1)
print(i,xpower)
f = lambda x, xpower: sum(x**xpower[i] for i in range(len(xpower)))
print("Example with n=5, x=2:"," ", f(2,xpower))
n=5
xpower=[]
for i in range(n):
xpower.insert(i, i+1)
print(i,xpower)
f = lambda x, xpower: sum(x**xpower[i] for i in range(len(xpower)))
print("Example with n=5, x=2:"," ", f(2,xpower))