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 : 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)
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 : 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)
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