如何将两个二维列表中的第二列相加?
我在Python中有两个数字列表,如下所示:
a = [ [1000,1], [2000,2], [3000,3] ]
b = [ [1000,5], [2000,6], [3000,7] ]
这两个列表的第一列总是相同的。我想把第二列的数字加在一起,形成一个第三个列表c,具体如下:
c =[ [1000,6], [2000,8], [3000,10] ]
我尝试过用列表推导式来实现这个,但在使用二维列表时,语法总是搞不对。
谢谢
补充: 好的,这是我尝试的最好结果。我忘记了zip函数:
c = [[x[0],x[1] + y[1]] for x,y in (a,b)]
3 个回答
1
你的数据结构看起来更适合用字典来表示,因为子列表中的第一个元素似乎可以当作键来用。所以我建议你的数据可以这样设计:
a = {1000: 1, 2000: 2, 3000: 3}
b = {1000: 5, 2000: 6, 3000: 7}
使用更合理的数据结构有一个好处,就是Python通常会有很方便的内置功能来帮你完成想要的操作。在这种情况下,collections
模块非常有用:
from collections import Counter
c = dict(Counter(a) + Counter(b))
这样你就可以得到一个看起来像这样的c:
{1000: 6, 2000: 8, 3000: 10}
1
如果你的数据是整数(或者小数),你可以使用Numpy数组:
import numpy as np
aa = np.array([[ 1000, 1 ], [ 2000, 2 ], [ 3000, 3 ]])
bb = np.array([[ 1000, 5 ], [ 2000, 6 ], [ 3000, 7 ]])
cc = np.array(aa)
cc[:,1] += bb[:,1]
3
用列表推导式配合 zip()
函数就能解决这个问题:
c = [[aa[0], aa[1] + bb[1]] for aa, bb in zip(a, b)]