如何使用reduce / map / list理解求和?

时间:2015-03-06 15:28:55

标签: python sum generator-expression

enter image description here 我上面有一个等式,我想计算红色下划线的总和,[ρ0,ρ1,ρ2,...,ρN]是一个开始的列表。

for循环肯定可以解决问题。但我想知道是否有更简洁的pythonic风格。 我尝试了reduce函数,但它似乎只适用于列表的直接求和或乘法。如上所示,求和的方法是什么?

3 个答案:

答案 0 :(得分:3)

我认为你在寻找的是:

sum((x-y)**2 for (x,y) in izip(a, a[1:]))

表示数组a izip(a, a[1:])允许您同时访问阵列的第i和第i + 1个元素。

答案 1 :(得分:1)

为此使用numpy可能会更好,但在纯python中,您可以对生成器表达式求和。 e.g。

>>> sum(i**2 for i in range(10))
285

对于第二个学期,只需嵌套求和:

>>> sum(sum(i*j for i in range(10)) for j in range(10))
2025

我的i*j术语是你计算rho差异和余弦项的乘积的函数。

答案 2 :(得分:1)

或者你可以尝试编写一个递归函数

def listsum(numList):
   if len(numList) == 2:
        return math.pow(numList[0] - numList[1], 2)
   else:
        return math.pow(numList[0] - numList[1], 2) + listsum(numList[1:])

并称之为

listsum([1,3,5,7,9])