-
慕斯王
这是你要找的吗?a=[2,3,4,1]b=[5,6,7,2,8,9,1,2,3,4]c = []index = 0for item in a: c.append(sum(b[index: index + item])) index += itemprint(c)输出[11, 17, 15, 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 itbi = iter(b)[sum(it.islice(bi,x)) for x in a]# [11, 17, 15, 4]
-
拉莫斯之舞
a=[2,3,4,1] b=[5,6,7,2,8,9,1,2,3,4]new = []i=0for x in range(len(a)): el = a[x] new.append(sum(b[i:i+el])) i=i+elprint(new)#[11, 17, 15, 4]
-
开心每一天1111
我会用来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]
-
守候你守候我
在不创建新的中介列表的情况下,您可以执行以下操作:[ sum( b[ sum(a[:i]): ][ :a[i] ] ) for i in range(len(a)) ]虽然,它有点计算量大。使用构建列表的 for 循环c将是一种更有效的方法,就像@Balaji Ambresh 回答的那样。