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

Python游戏训练数据二维列表更新异常问题求助

二维列表更新异常:所有元素被覆盖为最新值的解决方法

问题根源是Python列表的引用特性:你始终在复用同一个tlistc列表对象,每次循环只是修改它的内容,然后将这个对象的引用赋值给tlistm的元素。这导致tlistm里的所有元素其实都指向同一个列表,最终所有元素都会显示成最后一次修改后的tlistc内容。

问题代码中的关键错误

  • 没有每次循环创建新的列表实例,一直修改同一个tlistc
  • tlistm.append('a')再tlistm[e] = tlistc的操作完全多余,且会引发引用问题

修正后的代码

for e in range(episodes):
    qm = random.randint(0,5)
    env.game(action)
    fps.tick(1)
    screen.fill(bgcolor)
    s = env.get_state()
    rew = s[12]
    q1 = rew + g * qm
    # 每次循环创建全新的列表,而非复用旧列表
    tlistc = []
    for k in range(12):
        tlistc.append(s[k])
    tlistc.append(action)
    tlistc.append(q1)
    # 直接将新列表添加到tlistm
    tlistm.append(tlistc)
    if s[13] == 1:
        env.game_reset()        
    action = random.randint(0,3)
    print(tlistm)

更简洁的写法(用列表推导式)

for e in range(episodes):
    qm = random.randint(0,5)
    env.game(action)
    fps.tick(1)
    screen.fill(bgcolor)
    s = env.get_state()
    rew = s[12]
    q1 = rew + g * qm
    # 一行构建新列表,避免手动循环添加
    tlistc = [s[k] for k in range(12)] + [action, q1]
    tlistm.append(tlistc)
    if s[13] == 1:
        env.game_reset()        
    action = random.randint(0,3)
    print(tlistm)

修正逻辑说明

每次循环都创建一个全新的tlistc列表对象,添加到tlistm中的是不同的对象引用。后续修改新的tlistc时,不会影响之前已经存入tlistm的列表,这样就能保证每个元素都是独立的训练数据项。

内容的提问来源于stack exchange,提问作者Hanging logic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:02:44