基于另一个列表的元素添加列表的元素

2024-06-28 10:57:05 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我以前问过的另一个问题(Dataframe add element from a column based on values contiguity from another columns)的延续,如果我使用pandasDataFrame,我得到了解决方案,但如果我有两个列表,我就没有了,这就是我被卡住的地方

我有两份清单:

a=[2,3,4,1]
b=[5,6,7,2,8,9,1,2,3,4]

结果我想使用a的值添加b的元素。 a = 2的第一个元素,因此我想从b添加前2个元素(5+6)

第二个元素是a = 3,因此我想从b添加接下来的3个元素(7+2+8)
等等

我尝试了afor循环,但总和总是从b的第一个元素开始。有没有一种方法可以在不改变b或创建另一个列表的情况下获得我想要的结果


Tags: columnsfromadd元素dataframe列表onanother
3条回答

努比:

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]

我将使用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]

这就是你要找的吗

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]

相关问题 更多 >