遍历列表修改避错:货车编号去重并合并对应重量的问题
解决方案
方法一:使用字典(推荐,适配所有重复场景)
字典的键天然具备唯一性,刚好能用来存货车编号,值则用来累计对应重量——不管重复项是连续还是分散的,都能完美处理:
wagon_list = [1234567, 2345678, 2345678, 3456789, 3456789, 3456789, 4567890] weight_list = [1.1, 2.2, 3.3, 2.2, 3.3, 2.2, 4.4] # 初始化空字典,用于存储编号和累计重量 wagon_weight_dict = {} # 遍历两个列表的对应元素 for wagon, weight in zip(wagon_list, weight_list): if wagon in wagon_weight_dict: # 编号已存在,累加重量 wagon_weight_dict[wagon] += weight else: # 编号不存在,新增条目 wagon_weight_dict[wagon] = weight # 从字典还原为目标列表 new_wagon_list = list(wagon_weight_dict.keys()) new_weight_list = list(wagon_weight_dict.values()) print("wagon_list =", new_wagon_list) print("weight_list =", new_weight_list)
运行结果:
wagon_list = [1234567, 2345678, 3456789, 4567890] weight_list = [1.1, 5.5, 7.7, 4.4]
方法二:指针遍历(仅适用于连续重复场景)
如果能确定重复编号一定是连续出现的,可以用指针遍历的方式处理:
wagon_list = [1234567, 2345678, 2345678, 3456789, 3456789, 3456789, 4567890] weight_list = [1.1, 2.2, 3.3, 2.2, 3.3, 2.2, 4.4] new_wagon_list = [] new_weight_list = [] n = len(wagon_list) i = 0 while i < n: current_wagon = wagon_list[i] total_weight = weight_list[i] # 检查后续连续的相同编号,累加重量 while i + 1 < n and wagon_list[i+1] == current_wagon: total_weight += weight_list[i+1] i += 1 # 将处理后的结果加入新列表 new_wagon_list.append(current_wagon) new_weight_list.append(total_weight) i += 1 print("wagon_list =", new_wagon_list) print("weight_list =", new_weight_list)
原代码问题分析
你的代码存在几个核心问题:
- 同时用
for i in wagon_list遍历和counter_3手动控制索引,逻辑混乱,容易出现索引越界或重复处理 - 仅考虑了连续两个重复的情况,无法处理三个及以上连续重复的条目
- 最后一个元素的处理逻辑错误,
counter_3 +=2会直接跳过多余位置,引发后续错误
总结
- 若重复编号可能分散在列表各处,优先用字典方法,逻辑简单兼容性强
- 若重复编号一定连续,指针遍历的方法效率也很高
内容的提问来源于stack exchange,提问作者PStavis
相关产品推荐
相关产品推荐

