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

如何在不使用numpy的Python中高效创建N×N二维列表?

原生Python创建N×N二维列表的高效方法

你提的这个问题确实是Python初学者很容易踩的坑——可变对象的引用复用问题,我来给你几个完全不依赖numpy的原生解决方案,既高效又符合Python的惯用写法:

1. 列表推导式(推荐)

这是Python里最简洁高效的方式,每次迭代都会创建一个全新的行列表,从根源上避免了引用同一个对象的问题:

N = 3
myMatrix = [[None] * N for _ in range(N)]

原理说明

[None] * N会创建一个包含N个None的新列表,而外层的for _ in range(N)会循环N次,每次都生成一个独立的新行。所以myMatrix里的每个子列表都是独立的可变对象,修改其中一行不会影响其他行。

如果要直接初始化填充值(比如你的i+j需求),还可以一步到位:

N = 3
myMatrix = [[i + j for j in range(N)] for i in range(N)]
print(myMatrix)
# 输出: [[0, 1, 2], [1, 2, 3], [2, 3, 4]]

2. 嵌套循环手动构建

如果你更倾向于直观的分步逻辑,可以用嵌套循环手动创建每一行,本质和列表推导式一致:

N = 3
myMatrix = []
for _ in range(N):
    # 每次循环创建一个新的行列表
    new_row = [None] * N
    myMatrix.append(new_row)

之后再进行赋值操作,就不会出现所有行同步修改的问题了。

为什么原写法会出错?

再回顾你最初的错误写法:

myList = [None] * 3
myMatrix = [myList] * 3

这里的[myList] * 3并没有创建3个独立的myList副本,而是把myList这个对象的引用复制了3次。也就是说,myMatrix[0]、myMatrix[1]、myMatrix[2]指向的是同一个列表对象,所以修改任意一个位置的值,其他行都会同步变化——这就是你看到所有行最后都变成[2, 3, 4]的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:48:25