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

为何Python中该代码无法实现二维方阵的转置?

问题分析与解决:Python二维方阵转置异常

你这段代码的核心问题是**invert = array并没有创建新数组,只是让invert和array指向同一个列表对象**。修改invert的同时,原array的元素会被同步改变,导致循环中后续读取的array[i][j]已经是被修改后的值,自然无法得到正确的转置结果。

举个具体的例子:

  • 当i=0,j=1时,执行invert[1][0] = array[0][1],会把原数组第二行第一列的4改成2,此时原array的第二行变成了[2,5,6]
  • 后续i=1,j=0时,读取array[1][0]得到的是修改后的2而非原始的4,最终结果就出现了部分转置的异常。

正确实现方式

方法1:初始化新数组后填充

先创建一个和原方阵尺寸一致的空数组,再逐个填充转置后的值:

array = [[1,2,3],[4,5,6],[7,8,9]]
n = len(array)
# 初始化n行n列的空数组
invert = [[0]*n for _ in range(n)]

for i in range(n):
    for j in range(n):
        invert[j][i] = array[i][j]

print(invert)
# 输出: [[1,4,7],[2,5,8],[3,6,9]]

方法2:列表推导式简化实现

如果不想写嵌套循环,方阵转置可以用列表推导式一行完成:

array = [[1,2,3],[4,5,6],[7,8,9]]
invert = [[row[i] for row in array] for i in range(len(array))]

或者利用zip函数更简洁(注意zip返回元组,需要转成列表):

invert = [list(col) for col in zip(*array)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:22:13