Python中具有不同长度的列表列表中的元素总和

时间:2014-06-03 20:08:29

标签: python list

我正在尝试计算列表列表中的元素总和。如果主列表中的列表都具有相同的大小,我可以毫不费力地计算总和,如下所示:

a = [[4], [8], [15]]
total = [sum(i) for i in zip(*a)]

结果:

total = [27]     #(4 + 8 + 15) = 27, GOOD!!!

但是我可能在主列表中有一个不同大小的列表,例如:

a = [[3], [4, 6], [10]]

预期结果:

total = [17, 19]     #(3 + 4 + 10) = 17, (3 + 6 + 10) = 19

我被困在这里,显然我对同等大小的列表的解决方案不起作用。以我定义的方式获得结果的最佳方法是什么?我的直觉是找出具有最大长度的列表,然后通过添加零将其他列表扩展到该长度,最后分别计算总和。这听起来像是一个丑陋的解决方案,我想知道是否有一种快速而优雅的方法来做到这一点。

谢谢!

编辑:应该更好地解释它。我也有点困惑......以下是更好的例子:

列表a中列表中的元素数量永远不会超过2.示例:

a = [[1], [10], [5]] #Expected result: [16] (1+10+5)

a = [[1, 10], [3], [4]] #Expected result: [8, 17] (1+3+4, 10+3+4)

a = [[1, 10], [3], [2, 8]] #Expected result: [6, 12, 15, 21] (1+3+2, 1+3+8, 10+3+2, 10+3+8)

EDIT2:接受的答案计算与列表大小无关的正确结果。

1 个答案:

答案 0 :(得分:5)

疯狂猜测:你想要所有可能的总和,即你从子列表中获取every possible selection个元素得到的总和?

>>> from itertools import product
>>> a = [[4], [8], [15]]
>>> [sum(p) for p in product(*a)]
[27]
>>> a = [[3], [4, 6], [10]]
>>> [sum(p) for p in product(*a)]
[17, 19]

检查这种解释的一种方法是看看你是否喜欢在评论中给出的测试答案:

>>> a = [[1,2], [3,4,5], [6,7,8,9]] # Tim Pietzcker's example
>>> [sum(p) for p in product(*a)]
[10, 11, 12, 13, 11, 12, 13, 14, 12, 13, 14, 15, 11, 12, 13, 14, 12, 13, 14, 15, 13, 14, 15, 16]