方阵转置代码报‘list index out of range’原因及非numpy替代实现
方阵转置代码错误分析与替代实现
错误原因
你碰到的list index out of range错误,问题出在**matrix1的初始化和赋值逻辑上**:
matrix1一开始是空列表[],循环里每次创建了空列表b,但没把b加到matrix1里。- 当执行
matrix1[i][j] = matrix[j][i]时,matrix1里连一行元素都没有,matrix1[i](比如第一次循环i=0时)压根不存在,更别说访问它的第j个元素了,直接触发索引越界。
修正后的原始代码
把创建好的行列表b添加到matrix1,再往b里加元素就行:
n = int(input("Enter the size of square matrix")) matrix = [] for i in range(n): a =[] for j in range(n): a.append(int(input("Enter the entries rowwise:"))) matrix.append(a) matrix1 = [] for i in range(n): b = [] for j in range(n): b.append(matrix[j][i]) # 先把转置元素加到当前行 matrix1.append(b) # 把当前行加入转置矩阵 # 打印结果 for i in range(n): for j in range(n): print(matrix1[i][j], end = " ") print() # 每行结束换行,避免所有元素挤在一起
不依赖numpy的其他转置方法
方法1:列表推导式(简洁版)
用Python的列表推导式可以一行搞定转置,代码更清爽:
n = int(input("Enter the size of square matrix")) matrix = [] for i in range(n): a =[] for j in range(n): a.append(int(input("Enter the entries rowwise:"))) matrix.append(a) # 列表推导式生成转置矩阵 transposed_matrix = [[matrix[j][i] for j in range(n)] for i in range(n)] # 打印结果 for row in transposed_matrix: print(" ".join(map(str, row)))
方法2:用zip函数快速转置
zip(*matrix)会自动把矩阵的行和列对齐互换,返回的是元组,转成列表就行:
n = int(input("Enter the size of square matrix")) matrix = [] for i in range(n): a =[] for j in range(n): a.append(int(input("Enter the entries rowwise:"))) matrix.append(a) # zip转置后转成列表 transposed_matrix = [list(row) for row in zip(*matrix)] # 打印结果 for row in transposed_matrix: print(" ".join(map(str, row)))
内容的提问来源于stack exchange,提问作者iotainhills
相关产品推荐
相关产品推荐

