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

Python生成行列乘积矩阵结果异常的问题及解决方法

解决Python中列表嵌套创建矩阵的引用问题

哈哈,这个坑我当初刚学Python的时候也踩过!你遇到的问题核心在于列表乘法的引用机制,咱们来一步步拆解:

为什么原来的代码会出错?

你写的 test = [[0] * (10)] * 10 看起来是创建了10行10列的矩阵,但实际上:

  • 内层的 [0] * 10 确实创建了一个包含10个0的列表;
  • 但外层的 *10 并没有生成10个独立的新列表,而是把同一个列表的引用复制了10次。

也就是说,test[0]、test[1]……test[9] 其实指向的是内存中同一个列表对象。所以你在循环里修改 test[i][j] 时,本质上是在修改那个唯一的列表,最后循环到 i=9 时,所有行都被覆盖成了最后一次的计算结果。

正确的实现方法

这里给你几种靠谱的写法:

方法1:用列表推导式创建独立行

先创建每行都是独立列表的矩阵,再进行赋值:

# 用列表推导式生成10个独立的行,每行都是新的[0]*10列表
test = [[0] * 10 for _ in range(10)]
for i in range(10):
    for j in range(10):
        test[i][j] = i * j

这里的 for _ in range(10) 会循环10次,每次都生成一个新的 [0]*10 列表,所以每行都是独立的,不会共享引用。

方法2:一步到位的列表推导式(更简洁)

直接把初始化和赋值合并,连循环都不用写:

test = [[i * j for j in range(10)] for i in range(10)]

这个写法会直接生成每行都是 i*j 结果的矩阵,效率更高,代码也更简洁。

方法3:用循环逐行创建

如果你更喜欢显式的循环写法,也可以这样:

test = []
for i in range(10):
    # 每次循环生成新的行列表
    row = [0] * 10
    for j in range(10):
        row[j] = i * j
    test.append(row)

验证结果

现在你再打印 test,就能得到预期的行列乘积矩阵了:

  • 第0行全是0(0乘以任何数都是0);
  • 第1行是 [0,1,2,...,9];
  • ...
  • 第9行是 [0,9,18,...,81]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:33:33