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 回答的那樣。
添加回答
舉報