如何在2个2d列表中添加第2列?

时间:2013-02-24 14:42:50

标签: python list set tuples

我在python中有两个数字列表,如下所示:

a = [ [1000,1], [2000,2], [3000,3] ]
b = [ [1000,5], [2000,6], [3000,7] ] 

第一列将始终相同。我想将第二列添加到一起形成第三个列表c,其中:

c  =[ [1000,6], [2000,8], [3000,10] ]

我尝试过使用列表推导这样做,但是我在使用2d列表时遇到了正确的语法问题。

由于

修改 好的,这是我尝试这个的最佳尝试。我忘了拉链功能了:

c = [[x[0],x[1] + y[1]] for x,y in (a,b)]

3 个答案:

答案 0 :(得分:3)

结合zip()函数的列表理解将起到作用:

c = [[aa[0], aa[1] + bb[1]] for aa, bb in zip(a, b)]

答案 1 :(得分: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}

答案 2 :(得分: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]