Le classement des magasins
Votre responsable veut les trois magasins qui ont le plus vendu ce mois-ci. Le fichier en compte 140, dans le désordre.
Une fois les ventes triées, la réponse est en haut de la liste.
Trier sert partout : un classement, un rapport par date, une recherche rapide. Cette leçon montre comment un tri marche, puis ce qu’on utilise vraiment au travail.
À la fin de cette leçon
Remarque
Je peux trier des données et dire à quoi cela sert.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Trier | ranger dans un ordre | |
| Croissant | du plus petit au plus grand | |
| Décroissant | du plus grand au plus petit | |
| Tri par sélection | placer le plus petit, puis le suivant, et ainsi de suite | |
| Échanger | mettre deux éléments à la place l’un de l’autre | |
| sorted | rend une copie triée d’une liste | sorted(ventes) |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Trier rend le travail suivant facile
Une liste triée permet la recherche dichotomique, bien plus rapide.
Elle donne aussi un classement : les meilleures ventes sont au début d’une liste décroissante.
Enfin, les doublons se retrouvent côte à côte. Deux factures avec le même numéro sautent aux yeux.
Le tri par sélection place le plus petit
Le tri par sélection fait plusieurs tours.
Au premier tour, il cherche le plus petit élément de toute la liste. Il l’échange avec le premier.
Au deuxième tour, il cherche le plus petit dans le reste, et le met en deuxième place. Il continue jusqu’au bout. La partie triée grandit d’une case à chaque tour.
À vous : regarder le tri tourner
# Délais de livraison en jours, pour 5 commandes.
delais = [5, 2, 8, 1, 4]
for i in range(len(delais)):
# On cherche le plus petit dans la partie pas encore triée.
plus_petit = i
for j in range(i + 1, len(delais)):
if delais[j] < delais[plus_petit]:
plus_petit = j
# On l'échange avec l'élément à la place i.
temporaire = delais[i]
delais[i] = delais[plus_petit]
delais[plus_petit] = temporaire
print("Tour", i + 1, ":", delais)
# Remplacez la liste par [9, 3, 7, 3, 1] et exécutez.
Exemple travaillé : trier 5, 2, 8, 1, 4
| Tour | Plus petit trouvé | Échange | Liste après le tour |
|---|---|---|---|
| 1 | 1 | 5 et 1 | 1, 2, 8, 5, 4 |
| 2 | 2 | aucun, déjà en place | 1, 2, 8, 5, 4 |
| 3 | 4 | 8 et 4 | 1, 2, 4, 5, 8 |
| 4 | 5 | aucun, déjà en place | 1, 2, 4, 5, 8 |
| 5 | 8 | aucun | 1, 2, 4, 5, 8 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Au travail, on utilise sorted
Écrire un tri soi-même sert à comprendre. Au travail, on utilise celui de Python, plus rapide et déjà testé.
sorted(liste) rend une nouvelle liste triée et laisse l’originale intacte. liste.sort() trie la liste elle-même.
Ajoutez reverse=True pour l’ordre décroissant. Les textes sont triés dans l’ordre alphabétique.
À vous : classer les ventes
ventes = [1250, 980, 2310, 1740, 640, 2050]
croissant = sorted(ventes)
decroissant = sorted(ventes, reverse=True)
print("Du plus petit au plus grand :", croissant)
print("Les trois meilleures ventes :", decroissant[0], decroissant[1], decroissant[2])
print("La liste d'origine n'a pas bougé :", ventes)
# sort, lui, trie la liste elle-même.
ventes.sort()
print("Après sort :", ventes)
# Triez des prénoms : ["Sarah", "Hugo", "Amine", "Chloé"].
Une erreur fréquente
Attention
Beaucoup pensent que Python trie toujours les nombres comme des nombres. C’est faux s’ils sont écrits en texte, comme après la lecture d’un fichier CSV. Alors "10" passe avant "9", car le caractère 1 vient avant 9. Convertissez d’abord avec int.