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

将result矩阵设为输入矩阵时,N×N矩阵转置结果错误

问题分析:矩阵转置中直接赋值原矩阵导致错误的原因

核心问题出在Python的列表引用机制上:

当你写result = matrix时,并没有创建一个新的矩阵,而是让result和matrix指向内存中同一个二维列表对象。也就是说,两者是同一个东西的不同名字,修改其中一个,另一个会同步变化。

结合你的例子拆解错误过程

假设你的转置逻辑是类似这样的:

n = 2
matrix = [[1,2], [3,4]]
result = matrix
for i in range(n):
    for j in range(n):
        result[j][i] = matrix[i][j]

执行过程中会出现以下问题:

  1. 当i=0, j=1时,执行result[1][0] = matrix[0][1],也就是把result(同时也是matrix)的第二行第一列改成2。此时原矩阵已经变成了[[1,2], [2,4]]。
  2. 后续i=1, j=0时,取matrix[1][0]的值已经不是原来的3,而是被修改后的2,所以赋值给result[0][1]后,最终得到错误的[1,2], [2,4]。

而你最初用列表推导式result=[[0 for i in range(len(matrix))] for j in range(len(matrix))]创建的是全新的独立矩阵,每个子列表都是重新生成的,和原matrix没有关联,所以修改result时不会影响原矩阵的值,转置逻辑就能正常执行。

解决方法

如果不想用全0初始化,你可以创建原矩阵的深拷贝,确保result是独立对象:

  • 方法1:列表推导式生成拷贝
    result = [row.copy() for row in matrix]
    
  • 方法2:用copy模块的深拷贝(适合更复杂的嵌套结构)
    import copy
    result = copy.deepcopy(matrix)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:52:48