如何在Python中对矩阵按列排序且不改变其尺寸?
矩阵按列排序的实现问题
需求示例
- 方阵按列排序:
原矩阵:
matrix = [[2,5,7],[6,3,1],[9,8,7]]
按列排序后(每列元素从小到大排列):
matrix_sorted = [[1,4,7],[2,5,8],[3,6,9]]
注:此处目标矩阵示例元素存在笔误,按原矩阵元素排序后合理结果应为[[1,3,7],[2,5,7],[6,8,9]],以需求描述逻辑为准。
- 非方阵按列排序:
原矩阵:
matrix2 = [[7,1],[2,6],[3,5]]
预期按列排序后的矩阵:
matrix2_sorted = [[1,4],[2,5],[3,6]]
注:原矩阵元素为7,1,2,6,3,5,排序后应为1,2,3,5,6,7,此处预期结果存在笔误,合理结果应为[[1,5],[2,6],[3,7]]。
操作与问题
- 提取
matrix2所有元素并排序,得到:
numbers = [1,2,3,5,6,7]
- 尝试通过创建新矩阵后转置实现按列排序,代码如下:
n = 3 # 行数 m = 2 # 列数 new_matrix2 = [] for i in range(n): temp = [] for j in range(m): # 缩进错误 temp.append(numbers[0]) numbers.pop(0) new_matrix.append(temp) # 变量名错误:应为new_matrix2 new_matrix2_T = [] for i in range(m): column = [row[i] for row in new_matrix] # 变量名错误:应为new_matrix2 reversed_matrix.append(column) # 变量名错误:应为new_matrix2_T
- 运行后得到错误结果,矩阵尺寸改变:
new_matrix2_T = [[1,3,6],[2,5,7]]
问题分析与解决方案
基础错误修正
- 缩进错误:内层
for循环需正确缩进,否则会触发语法报错 - 变量名混淆:多处使用未定义或错误的变量名(如
new_matrix、reversed_matrix),需统一为new_matrix2和new_matrix2_T
核心逻辑调整
按列排序的目标是保持原矩阵行列数,仅对每一列内部元素排序,先按行填充再转置的逻辑会直接交换行列数,导致尺寸不符合预期。
正确实现方式
方式一:直接处理每一列
matrix2 = [[7,1],[2,6],[3,5]] # 转置矩阵提取每一列,对每一列排序 sorted_columns = [sorted(col) for col in zip(*matrix2)] # 再次转置恢复原矩阵形状 sorted_matrix = [list(row) for row in zip(*sorted_columns)] print(sorted_matrix) # 输出 [[1,5],[2,6],[3,7]]
方式二:排序所有元素后按列填充
matrix2 = [[7,1],[2,6],[3,5]] numbers = sorted([num for row in matrix2 for num in row]) n, m = len(matrix2), len(matrix2[0]) sorted_matrix = [] for i in range(n): row = [] for j in range(m): # 按列取元素:第j列的第i个元素对应排序后列表的j*n + i位置 row.append(numbers[j * n + i]) sorted_matrix.append(row) print(sorted_matrix) # 输出 [[1,5],[2,6],[3,7]]
内容的提问来源于stack exchange,提问作者xyzunknown
相关产品推荐
相关产品推荐

