对基于其他元素的列表的列表的最后一个元素求和?



我有两个列表如下:

 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遍历了两个列表,但是你把这两个列表加在一起(合并),而不是只加最后一个元素的值。您还忽略了检查前两个值是否相等的条件。

请注意注释掉的列表中有一个条目将被跳过。从调试的角度来看,这绝对比添加所有条目的方法要好。

最新更新