Trier une partie de matrice 2d sans utilser numpy
Bonjour.
j'ai une matrice MxN d'entiers. Je veux ne trier que la sous-matrice commençant en (i,i) (ne pas prendre en compte les i premières lignes et colonnes) :?
Le tri doit s'effectuer sur la i° colonne par ordre décroissant.
par exemple pour i = 2 :
Code:
sort_sub_matrix([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]],2)
je veux obtenir :
[1, 1, 1, 1]
[2, 2, 2, 2]
[3, 3, 4, 4]
[4, 4, 3, 3]
J'ai codé cette fonction qui fournit le résultat attendu mais je trouve ça bien lourd :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| def sort_sub_matrix(M, indice):
M2 = []
for r in M[indice:]:
M2.append(r[indice:])
M2.sort(reverse=True)
for r_item, r_value in enumerate(M2):
for c_item, c_value in enumerate(r_value):
M[r_item + indice][c_item + indice] = c_value
return M
M = [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]]
for r in M:
print(r)
print('')
M = sort_sub_matrix(M, 2)
for r in M:
print(r) |
Bien sûr, c'est sans numpy sinon un coup de slicing et c'est terminé.
Si quelqu'un a une solution plus élégante, je suis preneur :hola: