Tuto Python : Ordonner ou trier une liste

Tables des matières

Introduction

  1. Qu'est-ce que le tri en python ?
  2. Classement des valeurs dans la liste avec la méthode sort ()

2.1 Paramètres de Sort ()

2.2 Obtenir une valeur de sort ()

2.3 Tri par ordre décroissant

2.4 Tri avec la fonction personnalisée à l'aide de key

  1. Classement des valeurs dans la liste avec sorted ()

3.1 Paramètres de la fonction sorted ()

3.2 Obtenir une valeur de sorted ()

3.3 Tri par ordre décroissant avec Sorted ()

3.4 Sorted () Avec un argument clé (key)

  1. Tri de liste avancé avec lambda

4.1 Utilisation de lambda avec list.sort ()

4.2 Utilisation de lambda avec Sorted ()

  1. Quand utiliser Sorted () et Quand utiliser. Sort () ?
  2. Étude de cas

6.1 Trier une liste à partir d'un fichier en python

6.2 Trier une liste d'objets

  1. Exercices

7.1 Exercice 1

7.2 Exercices 2

7.3 Exercice 3

  1. Solution des exercices

8.1 Exercice 1

8.2 Exercice 2

8.3 Exercice 3

Conclusion

Introduction

Le tri est une activité courante dans la vie des développeurs de logiciels. Dans une installation Python standard, les développeurs ont deux options pour trier leurs données, soit en utilisant la fonction sorted () ou la méthode sort ().

Le tri est une compétence que chaque ingénieur logiciel et développeur doit connaître. Non seulement pour passer des entrevues de codage, mais comme une compréhension générale de la programmation elle-même. Les différents algorithmes de tri sont une vitrine parfaite de la façon dont la conception d'algorithmes peut avoir un effet si fort sur la complexité, la vitesse et l'efficacité du programme.

1. Qu'est-ce que le tri en python ?

Le tri est une organisation des éléments dans un ordre particulier. Pour en expliquer davantage, le tri est l'ordre des valeurs en fonction de nos préférences. La préférence peut être croissante ou décroissante selon nos besoins.

2. Classement des valeurs dans la liste avec la méthode sort ()

La méthode sort () ordonne les valeurs d'une liste donnée dans un ordre croissant ou décroissant.

La syntaxe de la méthode sort () est:

list.sort (key = ..., reverse = ...)

Alternativement, vous pouvez également utiliser la fonction sorted () intégrée de Python dans le même but.

Remarque : la différence la plus simple entre sort () et sorted () est : sort () modifie la liste directement et ne renvoie aucune valeur, tandis que sorted () ne change pas la liste et renvoie la liste triée.

sorted(list, key=..., reverse=...)

2.1 Paramètres de Sort ()

Par défaut, sort () n'a besoin d'aucun paramètre obligatoire. Cependant, il a deux paramètres facultatifs à définir :

  • Reverse - Si True, la liste ordonnée est inversée (ou triée par ordre décroissant).
  • Key - fonction qui fonctionne comme une clé pour la comparaison de triKey - fonction destinée à la comparaison de tri.

2.2 Obtenir une valeur de sort ()

La méthode sort () ne renvoie aucune valeur. Au contraire, elle permet de changer la liste d'origine. Si vous voulez qu'une fonction renvoie la liste triée plutôt que de modifier la liste d'origine, utilisez sorted () (les explications viendront plus tard)

Exemple 1 : trier une liste de voyelles

Syntaxe :

voyelles = ['e', 'a', 'u', 'o', 'i']
voyelles.sort()
print(voyelles)

Résultat d’exécution :

2.3 Tri par ordre décroissant

La méthode sort () accepte un paramètre inverse comme argument facultatif. La définition reverse = True permet de trier la liste dans l'ordre décroissant.

list.sort (reverse = True)

Exemple 2 : Trions la liste par ordre décroissant

Syntaxe :

voyelles = ['e', 'a', 'u', 'o', 'i']
voyelles.sort(reverse=True)
print('Liste triée (par ordre décroissant):', voyelles)

Résultat d’exécution :

2.4 Tri avec la fonction personnalisée à l'aide de key

Pour un tri personnalisé plus complexe, sort () prend une option "key =" spécifiant une fonction "key" qui transforme chaque élément avant la comparaison. La fonction clé prend une valeur et renvoie une valeur comme résultat, et la valeur "key" renvoyée est utilisée pour les comparaisons dans le tri.

Par exemple, avec une liste de chaînes, la spécification key = len (la fonction intégrée len ()) trie les chaînes par longueur, du plus court au plus long. Le tri appelle len () pour chaque chaîne afin d’obtenir la liste des valeurs de longueur de mot, puis effectue le tri avec ces valeurs .

Prenons par exemple : Une liste d'informations sur les employés avec le nom, l'âge et le salaire :

Syntaxe :

employés = [
{'nom’ : 'john Doe', 'age': 25, 'salaire': 10000},
{'nom’ : 'William Hops', 'age': 30, 'salaire': 8000},
{'nom': 'Rick Hupond', 'age': 18, 'salaire': 1000},
{'nom’ : 'Marcel Lilian', 'age': 40, 'salaire': 15000},
]
# fonctions personnalisées pour obtenir des informations sur les employésdef get_name(employés ):
def get_nom(employés ):
return employés. get('nom')
def get_age(employés ):
return employés .get('age')
def get_salaire(employés ):
return employés .get('salaire')
# trier par nom (ordre décroissant)
employés .sort(key=get_nom)
print(employés )
# trier par age (ordre décroissant)
employés .sort(key=get_age)
print(employés )
# trier par salaire (ordre décroissant)
employés .sort(key=get_salaire, reverse=True)
print(employés )

Résultat d’exécution :

Ici, pour la première sortie, notre fonction personnalisée affiche le nom de chaque employé. Puisque le nom est une chaîne, Python le trie par défaut en utilisant l'ordre alphabétique. Pour la deuxième sortie, age (int)est renvoyée et triée par ordre croissant.

Pour la troisième sortie, la fonction de salaire (int) est triée par ordre décroissant en utilisant reverse = True.

3. Classement des valeurs dans la liste avec sorted ()

La fonction sorted () ordonne les valeurs d'un itérable dans un ordre spécifique (croissant ou décroissant) et renvoie l'itérable trié sous forme de liste.

La syntaxe de la fonction sorted () est :

sorted (iterable, key=None, reverse=False)

3.1 Paramètres de la fonction sorted ()

sorted () peut avoir au maximum trois paramètres:

  • Iterable- Une séquence (chaîne, tuple, liste) ou collection (ensemble, dictionnaire, ensemble figé) ou tout autre itérateur.
  • Inverser (facultatif)- Si True, la liste ordonnée est inversée (ou ordonnée par ordre décroissant). La valeur par défaut est False si elle n'est pas fournie.
  • Clé (facultatif)- Une fonction qui fonctionne comme une clé pour la comparaison de tri. La valeur par défaut est None.

3.2 Obtenir une valeur de sorted ()

Pour nous familiariser avec Python sorted (), nous allons d'abord utiliser cette méthode pour donner une liste de nombres et de chaînes

Exemple 1 : Tri des numéros

Vous pouvez utiliser Python pour ordonner une liste en utilisant sorted (). Dans cet exemple, nous avons une liste de nombres pour laquelle nous allons appliquer cette méthode

Syntaxe :

numéros = [7, 4, 3, 1,5,8,9]
sorted(numéros)

Résultat d’exécution :

Le résultat de cette syntaxe est une nouvelle liste ordonnée. Lorsque la liste originale est imprimée, les éléments initiaux restent les mêmes. Cet exemple montre quatre caractéristiques principales de sorted ():

  • La fonction triée n'avait pas besoin d'être définie et appelée. Il s'agit d'une fonction intégrée trouvée dans une installation standard de Python 3.
  • sorted (), sans argument supplémentaire, ordonne les éléments en nombres par ordre croissant, c'est-à-dire du plus petit au plus grand.
  • L'élément de nombres d'origine est inchangé car sorted () fournit un résultat trié et ne modifie pas les éléments d'origine en place.
  • Lorsque sorted () est appelé, elle fournit une liste ordonnée comme résultat de retour.

Ce dernier point signifie que sorted () peut être utilisée sur une liste, et la sortie peut être immédiatement utilisée avec une variable :

Syntaxe :

numéros = [7, 4, 3, 1,5,8,9]
numéros_triés = sorted(numéros)
numéros_triés

Résultat d’exécution :

Dans cet exemple, il y a maintenant une nouvelle variable numéros_sorted dans laquelle la sortie de sorted() est stockée.

Exemple 2 : Trier une liste de chaînes de caractères 

Dans cet exemple, nous allons utiliser la méthode sorted () pour ordonner une liste de chaînes :

Syntaxe :

chaîne = ['j\'aime' ,'apprendre' ,'python','sur', 'cour-gratuit.com']
trier_chaîne = sorted(chaîne)
trier_chaîne

Résultat d’exécution :

Remarque : Lorsque vous triez des chaînes, une lettre majuscule compte

Exemple :

Dans l'exemple suivant, nous écrirons un nom en minuscules et les autres en majuscules.

Syntaxe :

noms = ['Harry', 'Suzan', 'haarry', 'Mike']
sorted(noms)

Résultat d’exécution :

Python utilise le point de code Unicode de la première lettre de chaque chaîne pour connaître l'ordre de tri croissant. Cela signifie que sorted () ne traitera pas le nom «haarry» et les autres noms de la même manière.

3.3 Tri par ordre décroissant avec Sorted ()

Sorted () utilise un argument de mot-clé facultatif appelé reverse, qui modifie le comportement ordonnateur en fonction du booléen qui lui est attribué. Si l'inverse à la valeur True, le tri sera dans l'ordre décroissant .Nous appliquerons l'argument opposé à la liste des noms dans l'exemple précédent.

Syntaxe :

noms = ['Hari', 'Suzan', 'John', 'Mike']
sorted(noms, reverse=True)

Résultat d’exécution :

La logique d'ordination reste la même, ce qui signifie que les chaînes sont toujours triées par leur première lettre. Mais le résultat a été inversé avec reverse définie sur True.

3.4 Sorted () Avec un argument clé (key)

L'un des paramètres les plus importants de sorted () est l'argument appelé key. Cet argument accepte qu'une fonction lui soit transmise, et cette fonction sera utilisée sur chaque valeur de la liste triée pour déterminer l'ordre de classement.

Pour expliquer plus en détail, nous utiliserons un exemple simple, imaginons que la condition pour trier une liste spécifique est la longueur des chaînes de la liste, de la plus courte à la plus longue. La fonction qui renvoie la longueur d'une chaîne est len (), nous l'utiliserons comme argument clé dans l'exemple suivant :

Syntaxe :

fruits = ['framboise', 'kiwi', 'ananas', 'pomme']
sorted(fruits, key=len))

Résultat d’exécution :

La sortie est une liste avec une chaîne triée du plus court au plus long. La longueur de chaque valeur de la liste est connue par len (), puis renvoyée dans l'ordre croissant.pro

4. Tri de liste avancé avec lambda

Au lieu d'écrire une fonction autonome, vous pouvez utiliser une fonction lambda définie dans l'argument clé.

Un lambda est une fonction anonyme qui :

  • Doit être définie dans une ligne.
  • N'a pas de nom.
  • Ne peut pas contenir de déclarations.
  • S'exécute comme une fonction.

4.1 Utilisation de lambda avec list.sort ()

Il vaut mieux utiliser la fonction lambda pour résumer une fonction en une seule ligne. Nous allons utiliser la fonction lambda comme clé dans l'exemple d'employé que nous avons utilisé auparavant.

Syntaxe :

employés = [
{'nom': 'john Doe', 'age': 25, 'salaire': 10000},
{'nom': 'William Hops', 'age': 30, 'salaire': 8000},
{'nom': 'Rick Hupond', 'age': 18, 'salaire': 1000},
{'nom': 'Marcel Lilian', 'age': 40, 'salaire': 15000},
]
employees.sort(key=lambda x: x.get('nom'))
print(employees, end='\n\n')
employees.sort(key=lambda x: x.get('age'))
print(employees, end='\n\n')
employees.sort(key=lambda x: x.get('salaire'))
print(employees, end='\n\n')

Résultat d’exécution :

4.2 Utilisation de lambda avec Sorted ()

Syntaxe :

# Éléments de la liste: (nom du participant, score sur 100, âge)
liste_participantst = [
('Ali', 60, 19),
('William', 74, 16),
('David', 85, 20),
('Jimmy', 74, 22),
('John', 44, 19)
]
sorted_list = sorted (liste_participantst, key=lambda item: (item [1], item [2]))
print(sorted_list)

Résultat d’exécution :

Les utilisations sont infinies quant à la façon dont l'ordination peut être effectuée lorsque vous utilisez à la fois le mot-clé et les arguments inversés dans sorted (). Le code peut être organisé et petit lors de l'utilisation d'un lambda de base pour une fonction, ou vous pouvez écrire n'importe quelle nouvelle fonction, l'importer et l'utiliser dans l'argument key .

5. Quand utiliser Sorted () et Quand utiliser. Sort () ?

Au cours de ce tutoriel, vous avez vu les principales différences entre sorted () et .sort (), mais comment choisir leur utilisation selon notre besoin ?

Si vous utilisez des données volumineuses dans votre projet et que vous désirez avoir la possibilité de récupérer les données d'origine, alors .sort () n'est pas la méthode appropriée. Si les données sont une copie ou des données de projet sans importance et que vous n'en avez pas besoin dans le futur, alors .sort () est une bonne option.

6. Étude de cas

6.1 Trier une liste à partir d'un fichier en python

Considérons que vous avez le fichier chat.txt suivant qui contient des données d'une conversation :

Et vous souhaitez trier les fichiers de messages en fonction de la date du message :

Syntaxe:

lignes = [line for line in open('discussion.txt')]
lignes.sort()
print(lignes)

Résultat d’exécution :

6.2 Trier une liste d'objets

Si vous avez une liste d'objets génériques et que vous souhaitez trier ces objets en fonction de certains critères personnalisés, suivez les étapes ci-dessous.

Prenons un exemple, supposons que vous ayez une classe utilisateur qui ressemble à ceci :

Syntaxe:

class utilisateur :
def __init__(self, nom, age):
self.nom = nom
self.age = age

Créons des objets User et ajoutons-les à une liste :

Syntaxe:

Billy = utilisateur('Billy', 22)
Ali = utilisateur('Ali', 34)
Leon = utilisateur('Leon', 18)
liste = [Billy, Ali, Leon]

Supposons maintenant que vous souhaitez trier les objets de cette liste par ordre alphabétique par l’attribut nom et puis en fonction de l’âge :

Syntaxe :

print([item.nom for item in liste])
liste.sort(key=lambda x: x.age)
print([item.nom for item in liste])

Résultat d’exécution:

7. Exercices

7.1 Exercice 1

Considérons une liste de tuples [(1,1,3), (0,2,1), (0,1,1), (0,1,3), (2,4,0)] que nous souhaitons trier. Utilisez les méthodes. sort et sorted () pour ordonner les tuples .

7.2 Exercices 2 

Étant donné une liste de chaînes.

Liste : ['Frank', 'Ali', 'Mike']

Triez la liste des chaînes par ordre alphabétique.

Triez la même liste par ordre décroissant.

7.3 Exercice 3 

Considérez la liste suivante contenant des noms et des âges de personnes, utilisez la fonction lambda comme paramètre clé pour trier la liste

âges = [('billy', 18), ('willis', 17), (kite, 15), ('emanuel', 19)]

8. Solution des exercices

8.1 Exercice 1

En utilisant la méthode .sort() :

Syntaxe :

liste = [(1,1,3), (0,2,1), (0,1,1), (0,1,3), (2,4,0)]
liste.sort()
print(liste)

En utilisant la méthode Sorted() :

Syntaxe :

liste = [(1,1,3), (0,2,1), (0,1,1), (0,1,3), (2,4,0)]
sorted(liste)

Résultat d’exécution :

8.2 Exercice 2

Liste triée par ordre alphabétique :

Syntaxe :

Noms=['Frank', 'Ali', 'Mike']
sorted(Noms)

Résultat d’exécution:

Liste triée par ordre décroissant :

Syntaxe :

Noms=['Frank', 'Ali', 'Mike']
sorted(Noms,reverse=True)

Résultat d’exécution:

8.3 Exercice 3

Trier une liste à l'aide de lambda :

Syntaxe :

ages = [('billy', 18), ('willis', 17), ('kite', 15), ('emanuel', 19)]
sorted(ages,key=lambda x: x[1])

Résultat d’exécution :

Conclusion 

Les méthodes list.sort () et sorted trient les éléments de liste en place de manière ascendante. Pour personnaliser le comportement de tri par défaut, utilisez l'argument clé facultatif en transmettant une fonction qui renvoie une valeur comparable pour chaque élément de la liste. Avec l'argument inverse booléen facultatif, vous pouvez passer de l'ordre croissant (reverse = False) à l'ordre décroissant (reverse= True).

Article publié le 13 Décembre 2020par Mouhtat Bilal