Cet article explore les différentes manières de classer des listes en Python.
Python propose deux approches principales pour le tri : la méthode sort()
, qui modifie la liste originale, et la fonction intégrée sorted()
, qui retourne une nouvelle liste triée.
Dans ce guide, vous découvrirez :
- La syntaxe de la méthode
sort()
et de la fonctionsorted()
- Des exemples de code pour trier des listes par ordre croissant et décroissant
- Comment personnaliser le tri avec le paramètre
key
- Les différences fondamentales entre
sort()
etsorted()
Commençons sans plus tarder ! 🚀
Syntaxe de la méthode sort()
en Python
La méthode sort()
est une fonction qui s’applique directement à une liste Python. Elle effectue le tri de la liste sur place, ce qui signifie qu’elle modifie la liste d’origine.
Voici la syntaxe de la méthode sort()
en Python :
<liste>.sort(reverse = True | False, key = <fonction>)
Analysons cette syntaxe :
<liste>
représente une liste Python valide.reverse
est un paramètre optionnel qui prend une valeur booléenne (True
ouFalse
).- Par défaut,
reverse
estFalse
, ce qui trie la liste par ordre croissant. Si vous souhaitez trier la liste par ordre décroissant, définissezreverse
surTrue
. key
est un autre paramètre optionnel, qui prend une fonction<fonction>
comme argument.<fonction>
peut être une fonction prédéfinie ou une fonction personnalisée.
Dans les sections suivantes, nous allons voir des exemples de code pour illustrer l’utilisation de sort()
.
Trier une liste Python par ordre croissant
Prenons une liste de nombres. Pour la trier par ordre croissant, vous pouvez simplement appeler la méthode sort()
sur la liste.
▶ Voici un exemple de code :
nombres = [25, 13, 6, 17, 9]
nombres.sort()
print(nombres)
# Résultat: [6, 9, 13, 17, 25]
Les nombres de la liste ont été classés par ordre croissant et la liste originale a été modifiée. C’est ce qu’on appelle un tri « sur place ».
Trier une liste Python par ordre décroissant
Pour classer la liste dans l’ordre décroissant, il suffit de définir le paramètre reverse
sur True
, comme le montre l’exemple ci-dessous.
nombres = [25, 13, 6, 17, 9]
nombres.sort(reverse = True)
print(nombres)
# Résultat: [25, 17, 13, 9, 6]
La liste est maintenant triée du plus grand au plus petit.
Utiliser le paramètre key
avec la méthode sort()
Ici, nous allons utiliser le paramètre key
pour personnaliser le tri.
Considérons la fonction mod5()
qui calcule le reste de la division d’un nombre par 5.
def mod5(x):
return x % 5
Nous allons utiliser cette fonction comme clé pour le tri.
Exécutez le code suivant :
nombres = [25, 13, 6, 17, 9]
nombres.sort(key = mod5)
print(nombres)
# Résultat: [25, 6, 17, 13, 9]
Analysez attentivement le résultat.
Au lieu du tri numérique standard, le classement est personnalisé en utilisant la fonction mod5
comme clé de tri.
- Les nombres qui laissent le reste le plus petit après la division par 5 apparaissent en premier.
- Les nombres qui donnent le reste le plus grand après la division par 5 sont placés à la fin.
Pour confirmer cela, exécutez ce code :
nombres = [25, 13, 6, 17, 9]
for nombre in nombres:
print(f"{nombre} a un reste de {nombre%5} quand divisé par 5")
# Résultat
25 a un reste de 0 quand divisé par 5
13 a un reste de 3 quand divisé par 5
6 a un reste de 1 quand divisé par 5
17 a un reste de 2 quand divisé par 5
9 a un reste de 4 quand divisé par 5
25 divisé par 5 donne un reste de 0, c’est donc le premier élément. 6 laisse un reste de 1, il est donc en deuxième position, et ainsi de suite. 9 donne un reste de 4, il est donc en dernier.
Au lieu de définir une fonction distincte, nous pouvons utiliser une fonction lambda. En Python, les lambdas sont des fonctions anonymes et concises. lambda arguments : expression
retourne l’expression évaluée avec les arguments donnés.
Voici comment réécrire le tri avec une expression lambda :
nombres = [25, 13, 6, 17, 9]
nombres.sort(key = lambda x:x%5)
print(nombres)
# Résultat: [25, 6, 17, 13, 9]
Jusqu’à présent, nous avons trié des listes de nombres. Voyons maintenant comment trier une liste de chaînes de caractères en Python.
Trier une liste Python par ordre alphabétique
Nous allons trier des listes de chaînes de caractères, avec des exemples inspirés de l’univers de Harry Potter. ✨
Considérons une liste d’étudiants de Poudlard. Nous voulons les trier par ordre alphabétique de leurs noms.
Par défaut, le tri de chaînes se fait par ordre alphabétique.
etudiants = ["Harry","Ron","Hermione","Draco","Cedric"]
Affichons la liste triée :
etudiants.sort()
print(etudiants)
# Résultat
['Cedric','Draco', 'Harry', 'Hermione', 'Ron']
Trier une liste Python par ordre alphabétique inverse
Pour trier par ordre alphabétique inverse, définissez le paramètre reverse
sur True
, comme dans l’exemple ci-dessous.
etudiants.sort(reverse = True)
print(etudiants)
# Résultat
['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']
La liste est maintenant triée par ordre alphabétique inverse.
Personnaliser le tri avec le paramètre key
Nous allons maintenant personnaliser le tri avec le paramètre optionnel key
.
Considérons la liste suivante, maisons
.
maisons = [
{1:"Draco","maison":"Serpentard"},
{2:"Harry","maison":"Gryffondor"},
{3:"Cedric","maison":"Poufsouffle"}
]
Ici, maisons
est une liste de dictionnaires. Chaque dictionnaire contient deux paires clé-valeur : le nom de l’élève et sa maison.
Nous voulons trier cette liste par ordre alphabétique des maisons.
Comme vous pouvez l’imaginer, nous devons définir le paramètre key
sur la maison de l’élève.
Pour extraire la maison de chaque élève, nous pouvons créer une fonction retournerMaison()
:
def retournerMaison(etudiant):
return etudiant['maison']
Cette fonction retourne la maison d’un élève donné.
Vous pouvez maintenant utiliser la méthode sort()
sur la liste maisons
comme suit :
maisons.sort(key=retournerMaison)
Le résultat ci-dessous montre que la liste est triée par maison, et non par nom d’élève. Nous avons Gryffondor, Poufsouffle et Serpentard dans l’ordre alphabétique.
print(maisons)
# Résultat
[{2: 'Harry', 'maison': 'Gryffondor'},
{3: 'Cedric', 'maison': 'Poufsouffle'},
{1: 'Draco', 'maison': 'Serpentard'}]
Vous pouvez également utiliser une fonction lambda pour définir le paramètre key
. Cette fonction retourne la maison de chaque élément de la liste.
▶ Exécutez le code suivant pour le vérifier :
maisons.sort(key=lambda etudiant:etudiant["maison"])
print(maisons)
# Résultat
[{2: 'Harry', 'maison': 'Gryffondor'},
{3: 'Cedric', 'maison': 'Poufsouffle'},
{1: 'Draco', 'maison': 'Serpentard'}]
Jusqu’ici, nous avons utilisé la méthode sort()
sur une liste. Vous savez qu’elle modifie la liste originale.
Que faire si vous voulez conserver la liste originale mais obtenir une copie triée ?
En Python, vous pouvez utiliser la fonction sorted()
.
Syntaxe de la fonction sorted()
en Python
La fonction sorted()
prend une liste ou toute autre collection comme argument et renvoie une copie triée. La liste d’origine n’est pas modifiée.
Voici la syntaxe de la fonction sorted()
en Python :
<copie_triee> = sorted(<liste>, reverse = True | False, key = <fonction>)
Remarquez que la syntaxe est très similaire à celle de la méthode sort()
.
<liste>
représente une liste Python valide et est un paramètre obligatoire.reverse
etkey
sont des paramètres optionnels.
Note: Contrairement à la méthode sort()
qui ne fonctionne qu’avec les listes, la fonction sorted()
peut trier tout itérable en Python, comme les listes, chaînes de caractères et dictionnaires.
Trier une liste Python avec la fonction sorted()
#1. Dans cet exemple, nombres
est une liste de nombres.
Vous pouvez appeler la fonction sorted()
avec nombres
comme argument et affecter le résultat à nombres_tries1
.
nombres = [25, 13, 6, 17, 9]
nombres_tries1 = sorted(nombres)
print(nombres_tries1)
# Résultat: [6, 9, 13, 17, 25]
Les nombres sont classés par ordre croissant.
Notez que la liste originale nombres
n’a pas été modifiée, car sorted()
retourne une nouvelle liste. Voici la confirmation :
print(nombres)
# Résultat: [25, 13, 6, 17, 9]
#2. Définissons le paramètre optionnel reverse
sur True
pour obtenir nombres_tries2
.
Comme le montre le code ci-dessous, nombres_tries2
est une nouvelle liste contenant les nombres classés par ordre décroissant.
nombres_tries2 = sorted(nombres,reverse = True)
print(nombres_tries2)
# Résultat: [25, 17, 13, 9, 6]
#3. Dans cet exemple, nous allons utiliser une liste de chaînes.
Comme dans les exemples précédents, appeler sorted()
retourne une nouvelle liste. Les éléments sont triés par ordre alphabétique.
fruits = ['poire','fraise','pomme','ananas','myrtille']
fruits_tries1 = sorted(fruits)
print(fruits_tries1)
# Résultat:
['ananas', 'fraise', 'myrtille', 'poire', 'pomme']
#4. Personnalisons le tri avec le paramètre key
. Définissons key
sur len
. Cela triera la liste en fonction de la longueur des chaînes.
Note: En Python, la fonction intégrée len()
prend en argument n’importe quel itérable, comme des listes, chaînes, tuples, etc. Elle retourne la longueur de l’itérable.
La chaîne la plus courte est au début de la liste triée et la plus longue est à la fin.
fruits = ['poire','fraise','pomme','ananas','myrtille']
fruits_tries2 = sorted(fruits,key=len)
print(fruits_tries2)
# Résultat:
['poire', 'pomme', 'ananas', 'fraise', 'myrtille']
Dans le résultat, « poire » est la chaîne la plus courte et « myrtille » est la plus longue.
Méthode sort()
vs. Fonction sorted()
en Python
Vous avez vu comment utiliser la méthode sort()
et la fonction sorted()
. Voici les différences essentielles entre les deux :
Méthode .sort() |
Fonction sorted() |
Trie la liste sur place, modifiant l’originale | Retourne une nouvelle liste triée |
Fonctionne uniquement avec les listes Python | Fonctionne avec tous les itérables, comme les listes, chaînes, et collections |
Ne retourne rien (type de retour: None ) |
Retourne une copie triée de l’itérable |
Conclusion 👩🏫
J’espère que ce tutoriel sur le tri de listes en Python vous a été utile.
Récapitulons ce que nous avons abordé :
- Utilisez
liste.sort(reverse = True | False, key = <fonction>)
pour trier une liste sur place, avec les paramètres optionnelsreverse
etkey
. - Utilisez
sorted(liste, reverse = True | False, key = <fonction>)
pour obtenir une copie triée de la liste.
Maintenant que vous savez comment trier les listes, vous pouvez explorer la compréhension de listes. Ou vous pouvez apprendre comment manipuler des fichiers ou travailler avec des fichiers JSON en Python.
Vous pouvez essayer les exemples dans un compilateur Python en ligne, tel que celui proposé par toptips.fr.