You need to enable JavaScript to run this app. Python循环为字典赋值列表值时所有值相同的修复
优惠活动
大模型
产品
解决方案
定价
更多

Python循环为字典赋值列表值时所有值相同的修复

核心问题定位

代码出现异常结果的根本原因和两处细节缺陷:

  • Python中列表是可变引用类型,你全流程只初始化了一个全局列表A,所有存入out1字典的值,本质都是这个同一个A的内存引用,不是独立的列表副本
  • 后续对A执行的append、clear操作,会直接修改所有已经存入字典的内容——因为所有字典值指向的都是同一块内存,最后自然所有位置都会被最后一组[-2,-2,-2,-2]的内容覆盖
  • 连续相同元素的分支里,重复执行out1[s] = A是无意义操作:键s没有变化,重复赋值的对象也是同一个引用,不会产生任何新的存储效果
修复方案

只要把“复用同一个全局列表A”的逻辑换掉,每个分组对应独立的列表实例,就可以得到预期结果,修正后的代码如下:

vo = [6, 5, 4, 4, 1, 0, -2, -2, -2, -2]  
out1 = {}  
# 初始化第一组,直接创建独立列表
current_group = [vo[0]]
start_pos = 1
out1[start_pos] = current_group

for i in range(1, len(vo)):
    if vo[i] == vo[i-1]:
        # 同组元素直接追加到当前分组列表即可,无需重复写字典
        current_group.append(vo[i])
    else:
        # 计算下一组的起始索引
        start_pos += len(current_group)
        # 关键:新分组直接创建全新的独立列表,不复用、不清空旧列表
        current_group = [vo[i]]
        out1[start_pos] = current_group

运行修正后的代码,输出完全匹配预期:

{1: [6], 2: [5], 3: [4, 4], 5: [1], 6: [0], 7: [-2, -2, -2, -2]}
容易踩的细节提醒
  • 绝对不要遇到新分组时,用对旧列表clear()再append的方式生成新组:这种操作本质还是在修改原来的列表对象,已经存在字典里的旧分组内容依然会被覆盖
  • 连续相同元素的分支不需要重复给字典赋值:只要键不变,字典里存的就是当前分组的列表引用,直接修改列表内容即可同步生效

内容的提问来源于stack exchange,提问作者Mohammad Saeidi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 18:06:04