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

如何在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]]。

操作与问题

  1. 提取matrix2所有元素并排序,得到:
numbers = [1,2,3,5,6,7]
  1. 尝试通过创建新矩阵后转置实现按列排序,代码如下:
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
  1. 运行后得到错误结果,矩阵尺寸改变:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:35:23