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

Python二维列表操作报错:append返回None触发AttributeError求解

问题原因解释

1. 为什么trace[1][0]会变为None

Python中所有对列表进行原地修改的方法(包括append()/extend()/sort()/reverse()等)的返回值都是None,不会返回修改后的列表本身。
你写的trace[i][0] = trace[i-1][0].append((i-1, 0))这行代码,是把append()执行后的返回值(也就是None)赋值给了trace[i][0],所以trace[1][0]自然就变成了None。

2. 为什么trace[0][0]被意外修改

append()是原地修改操作,你调用trace[i-1][0].append((i-1, 0))的时候,就已经直接修改了trace[i-1][0]这个列表本身的内容:

  • 第一次循环i=1时,i-1=0,所以你执行的是trace[0][0].append((0,0)),直接给trace[0][0]这个空列表加了元组,这就是你看到trace[0][0]被修改的原因
  • 赋值操作完成后trace[1][0]变成None,等到第二次循环i=2时,你尝试调用trace[1][0].append(),也就是给None调用append方法,自然就抛出了AttributeError。
正确写法参考

如果你想要实现「复制上一行的trace列表,再添加新元组赋值给当前位置」的效果,不要直接用append赋值,可以用两种写法:

# 写法1:列表拼接生成新列表
trace[i][0] = trace[i-1][0] + [(i-1, 0)]

# 写法2:先拷贝再修改
tmp = trace[i-1][0].copy()
tmp.append((i-1, 0))
trace[i][0] = tmp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:15:04