如果我有一个数字列表,例如 [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 作为最终答案,我建议您更仔细地查看数据。当三个独立的求和确认都得到相同的答案时,唯一的错误一定是在数据或公式中。
