5 回答

TA貢獻(xiàn)1864條經(jīng)驗 獲得超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貢獻(xiàn)1788條經(jīng)驗 獲得超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貢獻(xiàn)1820條經(jīng)驗 獲得超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貢獻(xiàn)1836條經(jīng)驗 獲得超13個贊
我會用來numpy.cumsum獲取下一系列總和的起始索引的運(yùn)行總和。然后,您可以將該索引列表壓縮到自身偏移 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貢獻(xiàn)1802條經(jīng)驗 獲得超10個贊
在不創(chuàng)建新的中介列表的情況下,您可以執(zhí)行以下操作:
[ sum( b[ sum(a[:i]): ][ :a[i] ] ) for i in range(len(a)) ]
雖然,它有點(diǎn)計算量大。使用構(gòu)建列表的 for 循環(huán)c
將是一種更有效的方法,就像@Balaji Ambresh 回答的那樣。
添加回答
舉報