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 :
je veux obtenir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part sort_sub_matrix([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]],2)
[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 :
Bien sûr, c'est sans numpy sinon un coup de slicing et c'est terminé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Si quelqu'un a une solution plus élégante, je suis preneur![]()
Partager