Python如何对两个嵌套列表中前两元素相同的项的末位元素求和
你代码的问题在于Python中列表的+运算符默认执行拼接操作,不是按位置对应元素相加,所以你会得到两个子列表拼接后的长列表结果。
解法1:列表顺序完全对应时使用(你的示例场景适用)
如果两个列表的元素顺序完全一致,第n项的前两个元素必然匹配,可以直接用列表推导式实现:
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 = [[a[0], a[1], a[2] + b[2]] for a, b in zip(lst1, lst2)]
运行后output就是你需要的[[1, 1, 2.2], [1, 2, 4.4], [2, 1, 7.7], [2, 2, 10.5]]。
解法2:列表顺序不匹配时使用
如果两个列表的元素顺序不一定对应,存在前两个元素相同的项位置不一致的情况,可以先将其中一个列表转换为字典做匹配映射,逻辑更稳妥:
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]] # 构建前两个元素到最后一个元素的映射 key_val_map = {(sub[0], sub[1]): sub[2] for sub in lst2} output = [] for sub in lst1: current_key = (sub[0], sub[1]) if current_key in key_val_map: output.append([sub[0], sub[1], sub[2] + key_val_map[current_key]])
内容的提问来源于stack exchange,提问作者jeny ericsoon
相关产品推荐
相关产品推荐

