如何在python中成对地对列表中的列表求和并将此总和放入新列表中

时间:2014-09-23 21:59:48

标签: python

这个问题非常清楚但只是一个例子:

a = [[1,2],[3,4],[5,6],[7,8]]

然后我想要的列表是:

a_new = [ 1+3+5+7 , 2+4+6+8]

列表中的列表总是具有相同的长度,当然我不仅要为两个维度执行此操作,还要为大数字n执行此操作。

到目前为止,我已尝试使用双循环但我完全失败了,所以非常感谢帮助。

3 个答案:

答案 0 :(得分:4)

使用zip() function将输入列表从行转换为列,然后sum()这些列:

[sum(col) for col in zip(*a)]

演示:

>>> a = [[1,2],[3,4],[5,6],[7,8]]
>>> zip(*a)
[(1, 3, 5, 7), (2, 4, 6, 8)]
>>> [sum(col) for col in zip(*a)]
[16, 20]

答案 1 :(得分:0)

使用地图:

>>> a = [[1,2],[3,4],[5,6],[7,8]]
>>> map(sum, zip(*a))
[16, 20]
>>>

答案 2 :(得分:0)

不是使用map()zip()reduce(),而是使用列表连接的纯列表推导方法:

[sum([x for x, y in a])]+[sum([y for x, y in a])]

>>> a = [[1,2],[3,4],[5,6],[7,8]]
>>> a_new = [sum([x for x, y in a])]+[sum([y for x, y in a])]
>>> a_new
[16, 20]
>>>