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
相关产品推荐
相关产品推荐

