我正在尝试计算一个列表中每个子列表中元素的总和。如果主列表中的所有子列表大小都相同,像下面这样计算总和没有问题:
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)
编辑2:接受的答案可以独立计算出正确的结果,不受列表大小的影响。
itertools.izip_longest
! - georg[[1,2], [3,4,5], [6,7,8,9]]
这个列表,你期望得到什么结果? - Tim Pietzcker