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

Python实现矩阵转置后结果与原矩阵相同的问题排查

问题原因

你写的双层循环遍历了矩阵所有n*n个坐标位置,每对需要交换的对称位置元素会被执行两次交换操作,效果完全抵消:

  • 第一次循环走到坐标(i,j)时,mat[i][j]和mat[j][i]完成第一次交换
  • 后续循环走到坐标(j,i)时,这两个位置的元素会被再次交换,回到初始状态
    最终输出的矩阵自然和原矩阵没有区别。如果输入的是非方阵,这套写法还会触发索引越界报错。
修复方法

方阵转置不需要遍历所有坐标,只需要遍历主对角线一侧的元素(上三角/下三角区域)即可,避免重复交换,修正后的完整代码如下:

inp = int(input())
mat = []
for i in range(inp):
    submat = list(map(int,input().split(',')))
    mat.append(submat)

print(mat)
n = len(mat)
for i in range(n):
    # j从i+1开始,仅遍历上三角区域,每个元素对仅交换一次
    for j in range(i + 1, n):
        mat[i][j], mat[j][i] = mat[j][i], mat[i][j]
        
print(mat)

如果需要兼容非方阵的转置场景,可以直接用Python内置的zip简化写法,不需要手写双层循环:

# 转置任意维度矩阵
mat = [list(row) for row in zip(*mat)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:54:24