Помогите решить задачу по сортировке матрицы на python
Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствий с ростом характеристик. Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент.
Вот мой код:
import random as r
print("Введите количество столбцов:")
n = int(input())
print("Введите количество строк:")
m = int(input())
summ = 0
max_sum = 0
a = [[r.randint(-10, 3) for j in range(n)] for jj in range(m)]
for g in range(len(a)):
for h in range(len(a[g])):
print(a[g][h], end=" ")
print()
def sum_otr(list, m, numb_col):
s = 0
for i in range(m):
if list[i][numb_col] < 0:
s += list[i][numb_col]
return s
def counter(list, kol_col, numb_col):
summ = 0
for i in range(kol_col):
if list[i][numb_col] < 0 and list[i][numb_col] % 3 == 0:
summ += abs(list[i][numb_col])
return summ
res_arr = []
for nk in range(n):
res_arr.append(counter(a, m, nk))
re = counter(a, m, nk)
print("\n", "Сумма отрицательных элементов по столбцам:", sum_otr(a, m, nk))
if re > max_sum:
max_sum = re
print("\n", res_arr)
for j in range(n):
mmin = j
i = j + 1
for i in range(n):
if res_arr[i] < res_arr[mmin]:
mmin = i
buf_sum = res_arr[j]
res_arr[j] = res_arr[mmin]
res_arr[mmin] = buf_sum
for ii in range(m):
buf_a = a[ii][j]
a[ii][j] = a[i][mmin]
a[i][mmin] = buf_a
for g in range(len(a)):
for h in range(len(a[g])):
print(a[g][h], end=" ")
print()
Почему матрица не изменяется?
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
Такой код должен решить эту задачу:
import random as r
def main():
n = 3#int(input("Введите количество столбцов:"))
m = 3#int(input("Введите количество строк:"))
a = [[r.randint(-10, 3) for j in range(n)] for jj in range(m)]
print('Начальная матрица: ')
output_matrix(a)
par = [[col, characteristic(a, col)] for col in range(n)] # [[idx столбца, характеристика], ...]
q = [x[0] for x in sorted(par, key=lambda x: x[1])] # порядок расстановки
new_matrix = [[0]*n for i in range(m)]
new_col = 0
for col in q:
for row in range(m):
new_matrix[row][new_col] = a[row][col]
new_col += 1
print('Преобразованная матрица: ')
output_matrix(new_matrix)
print('Характеристики столбцов:')
for x in par:
print(x[1], end=' ')
print()
print('Суммы отрицательных элементов по столбцам:')
for col in range(n):
print(sum_neg(new_matrix, col), end=' ')
print()
def output_matrix(matrix):
for row in matrix:
for el in row:
print(el, end=' ')
print()
print()
def characteristic(matrix, col):
s = 0
for i in range(len(matrix)):
n = matrix[i][col]
if (n < 0) and (n % 2): # число <0 и нечетное
s += abs(n)
return s
def sum_neg(matrix, col):
s = 0
for i in range(len(matrix)):
n = matrix[i][col]
if n < 0:
s += n
return s
main()