Python嵌套列表赋值异常求助:写入值时子列表同步变更
嵌套列表网格的批量修改问题解决
你的代码核心问题是创建嵌套列表时重复引用了同一个子列表对象,导致修改单个位置时所有行同步变化。
问题根源
看这段初始化代码:
Yardhelper = [] for n in range(0,N): Yardhelper.append("") for n in range(0,N): Yard.append(Yardhelper)
这里Yardhelper只被创建了一次,随后被重复添加到Yard中。Yard里的每一个元素都是同一个列表的引用,而非独立的新列表。所以当你修改Yard[x][y]时,实际上是修改了那个唯一的Yardhelper,所有行自然会同步显示这个修改。
修复方案
有两种简单的修复方式,核心都是确保每一行都是独立的列表:
方法1:使用列表推导式(推荐)
N = int(input()) # 直接生成N个独立的子列表,每个子列表初始化为N个0 Yard = [[0 for _ in range(N)] for _ in range(N)] tree_count = int(input()) for _ in range(tree_count): x, y = map(int, input().split()) Yard[x][y] = 1 print(Yard)
方法2:循环内创建新的子列表
N = int(input()) Yard = [] for _ in range(N): # 每次循环都新建一个子列表,避免复用同一对象 Yardhelper = [0] * N Yard.append(Yardhelper) tree_count = int(input()) for _ in range(tree_count): x, y = map(int, input().split()) Yard[x][y] = 1 print(Yard)
测试验证
输入:
3 1 0 1
输出将符合预期:
[[0, 1, 0], [0, 0, 0], [0, 0, 0]]
内容的提问来源于stack exchange,提问作者William Wright
相关产品推荐
相关产品推荐

