Python 列表中使用tuple构建网格赋值异常如何解决?
问题原因
你的代码问题出在列表的引用机制上:Python中的列表是可变对象,你构建grid时往里面追加的是同一个row列表的内存引用,而非独立的行副本。
- 你初始化了一个
row列表后,三次执行grid.append(row)操作,最终grid里的三个元素指向的是内存中完全相同的一个列表对象。 - 后续你修改任意
grid[x][y]的值,本质都是修改同一个row列表对应位置的内容,最后一次赋值(也就是x=2时的赋值)会直接覆盖之前所有x对应的位置的赋值结果,所以最终输出每一列的三个值全是x=2时的赋值结果。
修复方案
你只需要每次新增行时都创建一个独立的新列表即可,两种常见写法参考:
写法1:循环创建独立行
grid = [] for x in range(3): # 每次循环都新建一个row列表,保证各行独立 row = [] for y in range(3): row.append((0,0)) grid.append(row)
写法2:列表推导式(更简洁)
grid = [[(0,0) for _ in range(3)] for _ in range(3)]
修复后再执行你的赋值和打印逻辑,就会得到你预期的各个位置的(x,y)元组结果。
内容的提问来源于stack exchange,提问作者Arnaldo Montoya
相关产品推荐
相关产品推荐

