Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python n个lambda函数之和_Python_Python 3.x - Fatal编程技术网

Python n个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

我有一个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(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))