5 回答
TA贡献1864条经验 获得超2个赞
这是你要找的吗?
a=[2,3,4,1]
b=[5,6,7,2,8,9,1,2,3,4]
c = []
index = 0
for item in a:
c.append(sum(b[index: index + item]))
index += item
print(c)
输出
[11, 17, 15, 4]
TA贡献1788条经验 获得超4个赞
麻木的:
import numpy as np
np.add.reduceat(b,np.cumsum(np.concatenate([[0],a[:-1]])))
# array([11, 17, 15, 4])
Python:
import itertools as it
bi = iter(b)
[sum(it.islice(bi,x)) for x in a]
# [11, 17, 15, 4]
TA贡献1820条经验 获得超10个赞
a=[2,3,4,1]
b=[5,6,7,2,8,9,1,2,3,4]
new = []
i=0
for x in range(len(a)):
el = a[x]
new.append(sum(b[i:i+el]))
i=i+el
print(new)
#[11, 17, 15, 4]
TA贡献1836条经验 获得超13个赞
我会用来numpy.cumsum获取下一系列总和的起始索引的运行总和。然后,您可以将该索引列表压缩到自身偏移 1 以确定每次迭代求和的切片。
>>> from numpy import cumsum
>>> starts = cumsum([0] + a)
>>> [sum(b[i:j]) for i,j in zip(starts, starts[1:])]
[11, 17, 15, 4]
TA贡献1802条经验 获得超10个赞
在不创建新的中介列表的情况下,您可以执行以下操作:
[ sum( b[ sum(a[:i]): ][ :a[i] ] ) for i in range(len(a)) ]
虽然,它有点计算量大。使用构建列表的 for 循环c
将是一种更有效的方法,就像@Balaji Ambresh 回答的那样。
添加回答
举报