Как отсортировать элементы каждого столбца массива без использования numpy и pandas?
Задание звучит так:
"Отсортировать элементы каждого столбца двумерного массива чисел (n х m) по не убыванию значений элементов."
import random
n, m = 3, 3
A = [[random.randint(0, 10) for j in range(m)] for i in range(n)]
У меня есть несколько потенциально верных вариантов решения, но все они не рабочие(
1.
for j in range(m):
for i in range(n):
if A[i][j] > A[i + 1][j]:
A[i][j], A[i + 1][j] = A[i + 1][j], A[i][j]
2
Через транспонирование => sort/sorted
trasnpA = list(zip(*A))
for i in range(3):
sorted(A[i])
print(trasnpA)
print(list(zip(*trasnpA)))
3
Через sort/sorted c ключом
Ответы (2 шт):
Автор решения: Павел
→ Ссылка
Тут действительно проще всего решать через транспонирование.
import random
A = [[random.randint(0, 10) for j in range(4)] for i in range(4)]
A_transposed = list(zip(*A))
A_transposed_sorted = [sorted(row) for row in A_transposed]
A_sorted = [list(x) for x in list(zip(*A_transposed_sorted))]
print(A) # [[9, 2, 2, 4], [9, 6, 5, 0], [4, 10, 0, 5], [9, 6, 3, 0]]
print(A_sorted) # [[4, 2, 0, 0], [9, 6, 2, 0], [9, 6, 3, 4], [9, 10, 5, 5]]
Или в одну строчку
A_sorted = [list(x) for x in list(zip(*[sorted(row) for row in list(zip(*A))]))]
Автор решения: Valentin Kolesnikov
→ Ссылка
import random
n, m = 3, 3
A = [[random.randint(0, 10) for j in range(m)] for i in range(n)]
def matrix_column_sort(matrix):
transpose_matrix = [list(row) for row in zip(*matrix)]
sorted_transpose_matrix = list(map(sorted, transpose_matrix))
sorted_matrix = [list(row) for row in zip(*sorted_transpose_matrix)]
return sorted_matrix
print(A)
print(matrix_column_sort(A))
