Python实现含完全重复子列表的二维列表合并 累加重复项首元素
实现思路
用字典做合并的核心是给每个「除首元素外内容完全一致」的子列表设置唯一标识作为键,直接累加首元素即可,逻辑步骤如下:
- 初始化空字典存储合并中间结果:字典的键是子列表除首元素外的剩余内容(转成元组,因为列表是可变类型无法作为字典键),字典的值是对应分组累加的首元素总和
- 遍历原始二维列表的每个子列表,拆分出首元素和剩余元素部分更新字典:剩余元素对应的键已存在就累加当前首元素,不存在就新增键值对
- 遍历完成后,把字典的键值对重新拼接成子列表格式,就是最终结果
可直接运行的代码
# 原始输入二维列表 origin_list = [[20, 2, 2, 5], [20, 2, 2, 5], [40, 2, 2, 2, 5]] merge_dict = {} for sub_list in origin_list: first_val = sub_list[0] # 除首元素外的部分转元组,作为分组的唯一标识 rest_key = tuple(sub_list[1:]) if rest_key in merge_dict: merge_dict[rest_key] += first_val else: merge_dict[rest_key] = first_val # 拼接回要求的列表格式 result = [[val] + list(key) for key, val in merge_dict.items()] print(result)
运行后输出结果为[[40, 2, 2, 5], [40, 2, 2, 2, 5]],和预期结果完全一致。
补充说明
这个写法的时间复杂度是O(n),n是原始二维列表的子列表总数,字典查找是O(1)复杂度,比两层循环遍历查重的效率高很多。不管重复的子列表有多少个,只要首元素之外的内容完全一致,就会自动累加首元素,不会改动后面的元素内容,适配同类的所有合并场景。
内容的提问来源于stack exchange,提问作者AlienwareR
相关产品推荐
相关产品推荐

