数组中元素和索引的和

2024-04-25 22:44:52 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个数字列表,比如[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

任何帮助都将不胜感激


Tags: 代码in元素列表forindexnp数字
1条回答
网友
1楼 · 发布于 2024-04-25 22:44:52

我对您的公式做了一个小的修正,以便1/6在Python2.7中被计算为浮点(因此1/6 == 0.16666666),而不是整数除法(这将使1/6 == 0)(在Python3中,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。你知道吗

功能方式

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

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作为最终答案,我建议您更仔细地查看数据。当三次对总和的独立确认都得出了相同的答案时,唯一的错误必须在数据或公式中。你知道吗

相关问题 更多 >