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

Python矩阵排序求助:添加列和行并按列和升序排序

矩阵列和追加与按列和排序实现方案

问题场景

已通过以下代码生成MxM随机矩阵:

from random import randrange

matrix_size = int(input("Enter size of the matrix: "))
matrix = [[randrange(1, 51) for column in range(matrix_size)] for row in range(matrix_size)]

需要完成两个需求:

  1. 计算各列的和,将其作为一行追加到矩阵末尾;
  2. 按照列和的升序对矩阵的列进行排序。

完整解决方案代码

from random import randrange

# 1. 生成MxM随机矩阵
matrix_size = int(input("Enter size of the matrix: "))
matrix = [[randrange(1, 51) for column in range(matrix_size)] for row in range(matrix_size)]

# 2. 计算所有列的和并追加为矩阵最后一行
column_sums = []
for col_idx in range(matrix_size):
    sum_col = 0
    for row_idx in range(matrix_size):
        sum_col += matrix[row_idx][col_idx]
    column_sums.append(sum_col)
matrix.append(column_sums)

# 3. 按列和升序对列排序
# 转置矩阵:将原列转换为行,方便按列和排序
transposed_matrix = list(zip(*matrix))
# 以转置后每行的最后一个元素(即原列的和)为关键字升序排序
sorted_transposed = sorted(transposed_matrix, key=lambda x: x[-1])
# 再次转置恢复原矩阵结构,并转换为列表嵌套列表
sorted_matrix = [list(row) for row in zip(*sorted_transposed)]

# 4. 格式化打印结果
for row in sorted_matrix:
    for num in row:
        print(f'{num:>5}', end='')
    print()

代码说明

  1. 计算列和并追加:

    • 循环遍历每一列索引,累加该列所有行的元素值,得到每列的和并存储到column_sums列表;
    • 通过matrix.append(column_sums)将列和作为新行添加到矩阵末尾。
  2. 按列和排序列:

    • 利用zip(*matrix)转置矩阵,原矩阵的列会变成转置后的行,此时转置后每行的最后一个元素就是对应原列的和;
    • 使用sorted函数,通过lambda x: x[-1]指定排序关键字为转置后每行的最后一个元素(即列和),实现升序排序;
    • 再次转置排序后的矩阵,恢复原矩阵的行-列结构,并将zip返回的元组转换为列表,保证矩阵结构一致。

示例输出

输入矩阵尺寸5时,输出类似:

Enter size of the matrix: 5
   14    22    15    20    23    74
   26    27     7    27    26   113
    9    13    17    42    36   117
   41     2     1    29    32   105
   14    49    33    12    43   151
   104    113    73    130   160   580

(注:最后一行为排序后的列和,列的顺序按列和从小到大排列)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:54:35