Сортировка столбцов матрицы по возрастанию их сумм

Тема: 
Списки, кортежи

Задача. Найти суммы элементов столбцов матрицы и отсортировать столбцы матрицы по возрастанию найденных сумм.

Матрица на языке программирования Python представляет собой список, в который вложены другие одноразмерные списки. Каждый вложенный список будем считать строкой матрицы. Таким образом, для того, чтобы найти сумму элементов столбца, надо из всех вложенных списков взять элементы с одинаковым индексом. При обращении к элементам вложенных списков первый индекс обозначает номер вложенного списка в главном списке, второй индекс - номер элемента во вложенном списке. При нахождении суммы элементов конкретного столбца меняется первый индекс (т.е. номера строк).

В программе ниже после того, как матрица заполняется и выводится на экран, считаются и выводятся на экран суммы столбцов. При этом найденные суммы заносятся в одномерный список. Количество элементов этого списка равно количеству столбцов матрицы.

Далее происходит сортировка пузырьком списка сумм. При этом в случае если происходит обмен значений в списке сумм, то выполняется обмен столбцов матрицы. Индексы обменивающихся значений в списке сумм, совпадают с индексами обменивающихся столбцов. При обмене значений столбцов следует в цикле пройтись по всем строкам матрицы. Таким образом, вместе с сортировкой одномерного списка происходит сортировка столбцов матрицы.

В конце программы матрица и суммы столбцов снова выводятся на экран, но уже в отсортированном виде.

from random import random
N = 5
M = 7
 
matrix = []
for i in range(N):
    a = [0] * M
    for j in range(M):
        a[j] = int(random()*10)
        print('%3d' % a[j],end='')
    matrix.append(a)
    print()
 
suma = [0] * M
for j in range(M):
    for i in range(N):
        suma[j] += matrix[i][j]
    print('%3d' % suma[j],end='')
print('\n')
 
for j in range(M-1):
    for i in range(M-j-1):
        if suma[i] > suma[i+1]:
            suma[i],suma[i+1] = suma[i+1],suma[i]
            for k in range(N):
                matrix[k][i],matrix[k][i+1] = matrix[k][i+1],matrix[k][i]
 
for i in matrix:
    for j in i:
        print('%3d'%j,end='')
    print()
for i in suma:
    print('%3d'%i,end='')
print()

Пример выполнения программы:

  4  1  6  0  6  2  0
  1  5  4  0  0  3  6
  7  9  7  7  0  0  2
  7  0  9  9  4  2  0
  4  8  0  0  8  6  6
 23 23 26 16 18 13 14

  2  0  0  6  4  1  6
  3  6  0  0  1  5  4
  0  2  7  0  7  9  7
  2  0  9  4  7  0  9
  6  6  0  8  4  8  0
 13 14 16 18 23 23 26