LeetCode第2120题:Python二维列表赋值异常问题求助
问题分析与修正方案
错误原因
你用[[[0, 0]] * n] * n创建多维列表时,踩了Python列表乘法的典型坑——所有子列表都是同一个对象的引用。
具体逻辑:
[[0,0]] * n生成的n个元素,全是指向同一个[0,0]列表的引用;- 外层再执行
*n,是把上面生成的整个列表重复n次,也就是说grid1的n行本质是同一个子列表的多份引用。
所以循环修改grid1[i][j]时,其实一直在修改那个共享的子列表。当循环走到最后一轮i=2时,所有行都会同步显示最后一次修改的结果。
修正代码
用列表推导式创建多维列表,每次迭代都会生成新的独立列表,彻底避免引用共享问题:
n = 3 # 方式1:先初始化再赋值 grid1 = [[[0, 0] for _ in range(n)] for _ in range(n)] for i in range(n): for j in range(len(grid1[i])): grid1[i][j] = [i, j] print(grid1) # 方式2:直接用推导式生成目标结果,更简洁 grid1 = [[[i, j] for j in range(n)] for i in range(n)] print(grid1)
运行后会得到你期望的输出:
[[[0, 0], [0, 1], [0, 2]], [[1, 0], [1, 1], [1, 2]], [[2, 0], [2, 1], [2, 2]]]
内容的提问来源于stack exchange,提问作者tk_unatnahs
相关产品推荐
相关产品推荐

