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

编写的矩阵转置代码无法正常运行,请求问题排查与解决

问题排查与解决

代码存在的问题

  • 矩阵维度不匹配导致索引错误:原矩阵是m行n列时,转置矩阵应为n行m列,但代码直接用原矩阵的行列数操作传入的matrix_tran,若调用时传入的matrix_tran维度不符,会直接触发IndexError。
  • 依赖外部初始化矩阵,灵活性差:函数要求调用者提前创建好matrix_tran,但多数场景下用户更希望函数直接返回转置结果,而非手动初始化目标矩阵。
  • 未处理非矩形矩阵:若原矩阵每行长度不一致,len(matrix_org[0])会导致错误或结果不符合预期。

解决方法

方案1:函数内部创建转置矩阵(推荐)

直接在函数内根据原矩阵维度生成转置矩阵,无需外部传入目标矩阵,同时兼容非矩形矩阵:

def transpose(matrix_org):
    if not matrix_org:
        return []
    # 初始化转置矩阵,行列数与原矩阵互换
    matrix_tran = [[0 for _ in range(len(matrix_org))] for _ in range(len(matrix_org[0]))]
    for i in range(len(matrix_org)):
        for j in range(len(matrix_org[i])):
            matrix_tran[j][i] = matrix_org[i][j]
    return matrix_tran

也可以用Python内置zip函数简化实现:

def transpose(matrix_org):
    # 返回列表的列表而非元组的列表,需转换格式
    return [list(row) for row in zip(*matrix_org)]

方案2:保留传入参数的方式

如果一定要保留传入matrix_tran的逻辑,需先确保其维度正确,或在函数内重新初始化:

def Transpose(matrix_org, matrix_tran):
    if not matrix_org:
        return []
    rows_org = len(matrix_org)
    cols_org = len(matrix_org[0])
    # 重新初始化matrix_tran为正确维度
    matrix_tran = [[0 for _ in range(rows_org)] for _ in range(cols_org)]
    for i in range(rows_org):
        for j in range(cols_org):
            matrix_tran[j][i] = matrix_org[i][j]
    return matrix_tran

调用示例

# 测试矩形矩阵
original = [[1,2,3], [4,5,6]]
print(transpose(original))  # 输出 [[1,4], [2,5], [3,6]]

# 测试非矩形矩阵
original_non_rect = [[1,2], [3], [4,5,6]]
print(transpose(original_non_rect))  # 输出 [[1,3,4], [2, None,5], [None, None,6]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:48:11