Skip to main content
 首页 » 编程设计

python之数组中元素和索引的总和

2025年05月04日27shanyou

如果我有一个数字列表,例如 [1,2,3,4,5...],我想使用第一个元素和第一个索引计算一个方程,然后添加到具有索引的下一个元素等等在... 我怎样才能做到这一点?

我的实际 list

B = [0.183324722, 
     0.240975303, 
     0.209108771, 
     0.190439972, 
     0.142648498, 
     0.077993465, 
     0.012475611, 
     -0.032267127, 
     -0.075291522, 
     -0.056470670, 
     0.076201285, 
     0.123893204, 
     -0.029201193, 
     -0.091173542, 
     0.001317696, 
     0.026025526] 

代码如下:

RRR = 0.844243567521 
 
for index, Bi in enumerate(B): 
    T90Wr = 300 * (np.sum (Bi* ((RRR**(1/6) - 0.65)/0.35)**index)) 
 
print T90Wr 

任何帮助将不胜感激

请您参考如下方法:

我对你的公式做了一个小修正,以便 1/6 被评估为 float (因此 1/6 == 0.16666666),而不是整数除法(这将使 1/6 == 0)在 Python 2.7 中(在 Python 3 中,1/6 返回 0.1666666)。我怀疑这确实是您想要的。

根据你所说的:

I want to calculate an equation using the first element and first index and add to the next element with index and so on...

有很多方法可以完成这个任务。我提供了其中三种方法作为教学示例,以便您将来可以编写更好的代码。

程序方式

这是最简单的方法。基本上,对代码进行非常简单的更改即可完成此任务:

T90Wr = 0 # declare an initial value 
for index, Bi in enumerate(B): 
    T90Wr += 300 * (Bi* ((RRR**(1/float(6)) - 0.65)/0.35)**index) 

会起作用。

+= 使一切变得不同:它告诉 Python 添加 到 T90Wr 的现有值,而不是重写其当前值.结果是 257.36。

极简主义方式

与上述相同但代码较短的第二种方法:

T90Wr = sum(300 * (Bi* ((RRR**(1/float(6)) - 0.65)/0.35)**index) for index, Bi in enumerate(B)) 

它使用列表理解来创建一个生成器,该生成器由应用于 enumerate(B) 中每个值的公式的结果组成。然后它利用 sum() 将它们全部相加。和以前一样,结果是 257.36。

函数式方式

最后,您可以将 reduce 与 enumerate 结合使用以获得非常强大和富有表现力的代码:

formula = lambda index, Bi : 300*(Bi* ((RRR**(1/float(6)) - 0.65)/0.35)**index) 
T90Wr = reduce(lambda total, current: total + formula(*current), enumerate(B), 0) 

这将为您计算总和,结果为 257.36(相当接近您要查找的值,因此我假设您的公式有误)。


如果您绝对希望 261.1 作为最终答案,我建议您更仔细地查看数据。当三个独立的求和确认都得到相同的答案时,唯一的错误一定是在数据或公式中。