如何将两个二维列表中的第二列相加?

1 投票
3 回答
1255 浏览
提问于 2025-04-17 16:56

我在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)]

撰写回答