首页 > 解决方案 > 获取循环中理解列表生成的乘法列表中的值的总和

问题描述

我在循环中有一个理解列表,它将导致多个列表,如下所示:

[1,3,5,7,9,12]
[7,9,0,4,12,3 ] [9,4,8​​,
3,1,6]
[21,11,12,32,2, 12]

我不需要这个列表本身,而只需要这个列表中相同索引值的总和,如下所示:

[38,27,25,54,33](例如,38 是每个列表 1+7+9+21 中的第一个值)

我曾尝试使用 list/map/sum/zip 的组合来做到这一点:

list(map(sum,zip([func(data,x) for x in list(range(num)])))

其中“list(range(num)”是需要求和的列表数,
func(data,x)”是生成列表本身的函数

但它不起作用,因为 zip(),只需要像 zip(a,b,c) 这样的数据

看起来很简单,但我已经花了两天时间试图了解如何解决这个案例。

有什么办法可以得到这些列表的总和吗?

标签: pythonlistloopssumzip

解决方案


一旦你有你的结果列表,并且所述列表中的所有子列表的长度相同 - 将它们全部放在一个列表中并且简单地 -

[sum(item[i] for item in results) for i in range(len(results[0]))]

您的结果列表在哪里results

不完全确定您是如何生成这些结果的,但我假设这就是您获得上述结果列表的方式-

[func(data,x) for x in range(num)]

(请不要list(range(num))range返回一个对列表理解有效的生成器)

你只需要做

results = [func(data,x) for x in range(num)]
print([sum(item[i] for item in results) for i in range(len(results[0]))])

同样,这是假设func(data, x)返回一个列表(在此过程中长度恒定)

输入

# assume results = [[1,3,5,7,9,12],[7,9,0,4,12,3],[9,4,8,3,1,6],[21,11,12,32,2,12]]
print([sum(item[i] for item in results) for i in range(len(results[0]))])

输出

[38, 27, 25, 46, 24, 33]

推荐阅读