合并两个数组:同索引值相加,异索引保留原元素
数组合并:相同索引值相加,不同索引保留原数据
问题说明
现有两个数组,每个子元素包含索引和对应数值:
arr1 = [ [1000, 5.0], [1270, 5.0], [1315, 5.0] ] arr2 = [ [578, 5.0], [1000, 5.0], [1315, 5.0] ]
需要实现:
- 合并两个数组
- 相同索引的数值相加
- 不同索引直接保留原数据
- 最终数组不需要排序
之前试过zip()方法,但没法把索引和数值对应起来,达不到需求。
解决方法:用字典处理索引映射
字典的键刚好能存唯一索引,值用来累加数值,步骤很简单:
- 建个空字典存合并后的索引和数值
- 先遍历其中一个数组,把索引和数值存进字典
- 再遍历另一个数组,碰到已存在的索引就累加数值,不存在就直接存
- 最后把字典转回数组格式(Python 3.7及以上的字典会保留插入顺序,不用额外排序)
代码实现(匹配示例输出顺序)
如果要完全和示例里的输出顺序一致,先遍历arr2再遍历arr1就行:
# 原始数组 arr1 = [[1000, 5.0], [1270, 5.0], [1315, 5.0]] arr2 = [[578, 5.0], [1000, 5.0], [1315, 5.0]] # 初始化合并字典 merged_dict = {} # 先处理arr2的元素 for idx, val in arr2: merged_dict[idx] = val # 处理arr1,累加相同索引的值 for idx, val in arr1: if idx in merged_dict: merged_dict[idx] += val else: merged_dict[idx] = val # 转成目标数组格式 FINAL_ARR = [[idx, val] for idx, val in merged_dict.items()] # 打印结果 print("FINAL_ARR=") print(" [") for item in FINAL_ARR: print(f" {item[0]} {item[1]}") print(" ]")
执行结果
FINAL_ARR= [ 578 5.0 1000 10.0 1315 10.0 1270 5.0 ]
内容的提问来源于stack exchange,提问作者My name is jeff
相关产品推荐
相关产品推荐

