python3.0 列表逆向相加求和?

作者站长头像
站长
· 阅读数 4

a = [[1,100],[2,23],[6,456],[2,123],[6,456],[2,123],[6,456]]

我需要把所有的数依次相加求和

需要逆向2和相加(456+123)/2 = ....3个相加(456+123 + 456)/3 =........

最后这些和放到一个列表中

数据量大的情况下,有没有高效的写法。

我用

ct = []
                for mas in range(1, len(a)):
                    sum_total = 0.0
                    for ma in range(mas):
                        sum_total += float(a[i - ma][1])
                    avg = sum_total/mas
                ct.append(avg)

第二种

ct = []
             for i in range(len(a)):
                for s in range(i - 1, -1, -1):
                    avg = np.mean([float(a[t][1]) for t in range(s, i+1)])
                    ct.append(avg)

运行的时候 效率 太慢, 有没有高效的方法?

回复
1个回答
avatar
test
2024-06-25

你是指求索引1的后缀和吗

a = [[1,100],[2,23],[6,456],[2,123],[6,456],[2,123],[6,456]]

res = [0] * len(a)
res[-1] = a[-1][1]
for i in range(len(a) - 2, -1, -1):
    res[i] = res[i + 1] + a[i][1]
print(res)
# [1737, 1637, 1614, 1158, 1035, 579, 456]
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容