我有两个列表如下:
lst1=[[1,1,2],[1,2,4],[2,1,7],[2,2,10]]
lst2=[[1,1,0.2],[1,2,0.4],[2,1,0.7],[2,2,0.5]]
我想对上面列表的最后一个元素求和,其中项目的前两个元素是相同的。所以我想要的输出应该是:
output=[[1,1,2.2],[1,2,4.4],[2,1,7.7],[2,2,10.5]]
我是python的新手,尝试了下面的代码:
ziplst = zip(lst1, lst2)
sum = [x + y for (x, y) in ziplst]
但是它给了我这个输出,这是不正确的:
sum=
[[1, 1, 2, 1, 1, 0.2], [1, 2, 4, 1, 2, 0.4], [2, 1, 7, 2, 1, 0.7], [2, 2, 10, 2, 2,
0.5]]
在列表推导方法之后,您可以使用
# To have a skipped case
#lst1=[[1,1,2],[1,2,4],[2,0,7],[2,2,10]]
# Original
lst1=[[1,1,2],[1,2,4],[2,1,7],[2,2,10]]
lst2=[[1,1,0.2],[1,2,0.4],[2,1,0.7],[2,2,0.5]]
output = [[x[0], x[1], x[2] + y[2]] for x,y in zip(lst1, lst2) if x[:2] == y[:2]]
print(output)
在你的回答中,你正确地用zip
遍历了两个列表,但是你把这两个列表加在一起(合并),而不是只加最后一个元素的值。您还忽略了检查前两个值是否相等的条件。
请注意注释掉的列表中有一个条目将被跳过。从调试的角度来看,这绝对比添加所有条目的方法要好。