如果我有一个数字列表,如[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]
以下是代码:
RRR = 0.844243567521
for index, Bi in enumerate(B):
T90Wr = 300 * (np.sum (Bi* ((RRR**(1/6) - 0.65)/0.35)**index))
print T90Wr
任何帮助将不胜感激
答案 0 :(得分:5)
我对你的公式做了一个小的修正,以便1/6
被评估为一个浮点数(以便1/6 == 0.16666666
),而不是整数除法(这将使得1/6 == 0
)在Python中2.7(在Python 3中,1/6
返回0.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)
会奏效。
+=
完全不同:它告诉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作为最终答案,我建议您更仔细地查看数据。当总和的三个独立确认都得出相同的答案时,唯一的错误必须存在于数据或公式中。