数组中元素和索引的总和

Ism*_*il 1 python arrays for-loop list

如果我有一个数字列表,如[1,2,3,4,5 ...],我想用第一个元素和第一个索引计算一个方程式,并用索引添加到下一个元素,依此类推. . 我怎样才能做到这一点?

我的实际清单

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]
Run Code Online (Sandbox Code Playgroud)

这是代码:

RRR = 0.844243567521

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

print T90Wr
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激

Aks*_*jan 5

我对你的公式进行了一个小的修正,以便在Python 2.7(在Python 3中返回)中1/6作为浮点数(这样1/6 == 0.16666666)进行评估,而不是作为整数除法(将会产生).我怀疑这确实是你想要的.1/6 == 01/60.1666666

根据你所说的:

我想用第一个元素和第一个索引计算一个方程式,并用索引添加到下一个元素,依此类推......

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

程序方式

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

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

将工作.

+=有所不同:它告诉Python 添加到现有值T90Wr,而不是重写其当前值.结果是257.36.

极简主义的方式

第二种方式与上面相同,但代码更短:

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

它使用列表推导来创建一个生成器,该生成器包含应用于每个值的公式的结果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)
Run Code Online (Sandbox Code Playgroud)

这将计算你的总和,它出现在257.36(合理地接近你正在寻找的,所以我假设你的公式有误).


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