我试图计算列表列表中的元素总和.如果主列表中的列表都具有相同的大小,我可以毫不费力地计算总和,如下所示:
a = [[4], [8], [15]]
total = [sum(i) for i in zip(*a)]
Run Code Online (Sandbox Code Playgroud)
结果:
total = [27] #(4 + 8 + 15) = 27, GOOD!!!
Run Code Online (Sandbox Code Playgroud)
但是我可能在主列表中有一个不同大小的列表,例如:
a = [[3], [4, 6], [10]]
Run Code Online (Sandbox Code Playgroud)
预期结果:
total = [17, 19] #(3 + 4 + 10) = 17, (3 + 6 + 10) = 19
Run Code Online (Sandbox Code Playgroud)
我被困在这里,显然我的相同大小的列表的解决方案不起作用.以我定义的方式获得结果的最佳方法是什么?我的直觉是找出具有最大长度的列表,然后通过添加零将其他列表扩展到该长度,最后分别计算总和.这听起来像一个丑陋的解决方案,我想知道是否有一个快速,更优雅的方式来做到这一点.
谢谢!
编辑:应该更好地解释它.我也有点困惑......以下是更好的例子:
列表中列表中的元素数量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)
Run Code Online (Sandbox Code Playgroud)
EDIT2:接受的答案计算独立于列表大小的正确结果.
狂野猜测:你想要所有可能的总和,即你从子列表中获取每一个可能选择的元素得到的总和?
>>> 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]
Run Code Online (Sandbox Code Playgroud)
检查此解释的一种方法是查看您是否喜欢在评论中为测试提供的答案:
>>> 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]
Run Code Online (Sandbox Code Playgroud)