2013-02-24 45 views
1

我在蟒号码2所列出如下:如何在2个2d列表中添加第2列?

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

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

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

我曾尝试使用列表理解这样做,但我麻烦的语法正确使用2D名单。

感谢

编辑: 好吧,这里是在试图对我最好的尝试。我忘了ZIP功能:

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

是的,只是编辑包括它。 – nyc0202034 2013-02-24 14:48:37

回答

3

列表理解与zip()功能相结合,将这样的伎俩:

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

非常感谢老兄! – nyc0202034 2013-02-24 14:46:01

1

你的数据结构,看起来就像他们会更好地工作,字典,因为在第一要素子列表似乎可以用作键。所以,首先,我建议你的数据是这样的:

a = {1000: 1, 2000: 2, 3000: 3} 
b = {1000: 5, 2000: 6, 3000: 7} 

一个具有优势更恰当地想出来的数据结构中,蟒蛇通常会得到一个很好的内建做你要找的内容去做。在这种情况下,collections模块是非常有帮助的:

from collections import Counter 
c = dict(Counter(a) + Counter(b)) 

,让你的交流看起来像这样:

{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]