You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历列表修改避错:货车编号去重并合并对应重量的问题

解决方案

方法一:使用字典(推荐,适配所有重复场景)

字典的键天然具备唯一性,刚好能用来存货车编号,值则用来累计对应重量——不管重复项是连续还是分散的,都能完美处理:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:25:29