1

我在python中有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)]
4

3 回答 3

3

列表推导与zip()函数相结合可以解决问题:

c = [[aa[0], aa[1] + bb[1]] for aa, bb in zip(a, b)]
于 2013-02-24T14:44:13.173 回答
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))

这让你 ac 看起来像这样:

{1000: 6, 2000: 8, 3000: 10}
于 2013-02-24T14:56:48.613 回答
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]
于 2013-02-24T14:56:51.027 回答