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

为何代码nova_linha.append(matriz[i][j])行出现List index out of range错误?

为什么你的矩阵转置代码会出现List index out of range错误?

嘿,我来帮你拆解这个问题~你的代码出现索引越界的核心原因是循环逻辑完全搞反了,而且手动修改循环变量导致索引超出了矩阵的范围,具体问题和修正方案如下:

问题分析

先看你代码里的几个关键错误点:

  • 转置矩阵的逻辑应该是按列取元素,把原矩阵的每一列元素组成转置后的一行,但你现在的循环是先遍历行(i)再遍历列(j),方向完全反了。
  • 你在内部循环里手动执行了i+=1,这会让i的增长不受外层循环控制。举个例子:如果原矩阵是3行,外层循环初始i=0,进入内部循环后,第一次j循环时i变成1,第二次j循环i变成2,第三次j循环i就变成3了——而原矩阵的行索引最大是2,这时候访问matriz[i]自然就会触发List index out of range。
  • 最后一行的j+=1完全多余,因为内部的for j in range(...)已经会自动迭代j的值,手动修改只会打乱逻辑。

修正后的代码

方式1:修正循环逻辑(贴合你的原始思路)

我们调整循环顺序,先遍历原矩阵的列,再遍历行,同时去掉多余的手动变量修改:

def transpor_matriz(matriz):
    transposta = []
    # 先遍历原矩阵的列数(假设矩阵是规整的,每行长度相同)
    for j in range(len(matriz[0])):
        nova_linha = []
        # 再遍历原矩阵的行数
        for i in range(len(matriz)):
            nova_linha.append(matriz[i][j])
        transposta.append(nova_linha)
    return transposta

方式2:Python简洁写法(推荐)

用Python内置的zip函数可以一行搞定矩阵转置(注意如果是列表的列表,需要把zip的结果转成列表):

def transpor_matriz(matriz):
    return [list(coluna) for coluna in zip(*matriz)]

解释:*matriz会把原矩阵的每一行拆成独立的参数传给zip,zip会按位置把每行的元素配对,也就是拿到原矩阵的每一列,最后转成列表即可。

内容的提问来源于stack exchange,提问作者G.C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:22:34