如何在python中对列表的列表中的元素求和以进行任意组合



我有一个这样的列表,

A =      [[0.8922063, 0.26672425],
[0.34475611, 0.35976697],
[0.33253499, 0.18923898],
[0.66872466, 0.46248986],
[0.72823733, 0.10537784],
[0.40903598, 0.70639412],
[0.79926596, 0.90095583],
[0.67886544, 0.84573289],
[0.3641813, 0.64296743],
[0.07461196, 0.74290527]]

是list

列表的组合还有另一个列表

p = [5,4,2]

我需要对列表A中对应于p的元素求和,即A的前5个子列表的和,然后是后面4个(第6到第9)个子列表的和,最后是最后2个子列表的和。

将列表p转换为您想要的切片列表:

>>> q = [0,5,9,10]

你可以这样做:

>>> q = [sum(p[:i]) for i in range(len(p)+1)]

然后对A的切片求和:

>>> for i in range(len(q)-1):
listn = sum(sum(x) for x in A[q[i]:q[i+1]])
print(listn)
4.35005729
5.34739895
0.81751723

该函数通过跟踪最后切片的元素(从0开始)并将切片的索引与p中的数字加1,返回a中块的总和列表。

def sum_sublists(list1 : list, list2 : list) -> list:
sums=[]
last_slice = 0
for chunk_size in list2:
next_slice = last_slice+chunk_size
sums.append(sum([sum(el) for el in list1[last_slice:next_slice]]))
last_slice = next_slice
return sums
if __name__ == '__main__':
p = [5,4,1]
A = [[0.8922063, 0.26672425],
[0.34475611, 0.35976697],
[0.33253499, 0.18923898],
[0.66872466, 0.46248986],
[0.72823733, 0.10537784],
[0.40903598, 0.70639412],
[0.79926596, 0.90095583],
[0.67886544, 0.84573289],
[0.3641813, 0.64296743],

[0.07461196, 0.74290527],   
]
print(sum_sublists(A, p))