编写的矩阵转置代码无法正常运行,请求问题排查与解决
问题排查与解决
代码存在的问题
- 矩阵维度不匹配导致索引错误:原矩阵是
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
相关产品推荐
相关产品推荐

