Tri d'une table
Pour de nombreuses opérations, et pour une plus grande lisibilité, ou peut vouloir réorganiser les lignes de notre table de manière à ce qu'elles soient triées.
Une séquence, par exemple une list
, est triée
par ordre croissant si pour chaque paire d'éléments successifs a
et b
, a <= b
vaut True
.
Une séquence est triée
par ordre décroissant si pour chaque paire d'éléments successifs a
et b
, a >= b
vaut True
.
[1, 2, 3, 4, 5, 20, 30] # Triée par ordre croissant
[30, 20, 5, 0, -6, -8] # Triée par ordre décroissant
[-2, 20, 3, 26, 39, 22] # Non triée
Tri croissant avec Python
On verra dans une autre partie du cours comment implémenter nos propres tris, mais pour le moment, on va simplement utiliser les outils fournis par Python.
Pour trier une séquence, on peut utiliser la fonction sorted
, qui renvoie une copie triée par ordre croissant de la séquence
affiche
Pour trier une list
, on peut aussi utiliser la méthode sort
du type list
, qui trie directement la list
par ordre croissant en exploitant sa mutabilité :
affiche
Tri décroissant avec Python
La méthode reverse
du type list
permet d'inverser l'ordre des éléments d'une list
. En combinaison de la méthode sorted
, elle permet d'effectuer un tri décroissant.
Tri d'une table
Si on essaie de trier une table, on risque d'avoir un problème : la méthode sort
ne sait pas comment comparer les lignes de nos tables, qui sont des dict
.
Il nous faut donc spécifier sur quelle colonne on veut que le tri ait lieu. Pour celà, on va utiliser le paramètre nommé key
de la méthode sort
. Il corresponds à une fonction qui prends en paramètre un élément de la liste, et retourne une valeur pour le "représenter" dans la comparaison. Par exemple, si on veut trier la table sur la population, on pourra passer lambda l : l["population"]
en tant que key
.
Voici ce que ça donne si on veut trier la table population
par code postal :
Exercice 11
Implémentez la fonction trier_population_decroissante
, qui prends en paramètre une table de la forme de celle de population
, et la trie par ordre décroissant de population.
En executant le programme correspondant de l'exercice, vous devriez obtenir la sortie suivante :
| code_insee | nom | code_postal | population |
| ---------- | ------------------------ | ----------- | ---------- |
| 31555 | Toulouse | 31200 | 479553 |
| 06088 | Nice | 06200 | 340017 |
| 44109 | Nantes | 44300 | 309346 |
| 34172 | Montpellier | 34080 | 285121 |
| 67482 | Strasbourg | 67200 | 280966 |
| 33063 | Bordeaux | 33100 | 254436 |
| 75115 | Paris 15e Arrondissement | 75015 | 233392 |
| 59350 | Lille | 59800 | 232787 |
| 35238 | Rennes | 35700 | 216815 |
| 75120 | Paris 20e Arrondissement | 75020 | 195814 |
Attention, la population dans la table est de type str, alors qu'on veut comparer des entiers
TODO (prof) reprendre ici