Python >> Tutoriel Python >  >> Python

Comment trier une liste par ordre alphabétique en Python

Que se passe-t-il si vous avez une liste de chaînes (éléments de texte) et que vous devez les trier par ordre alphabétique ? Dans cet article, nous allons vous montrer comment trier une liste en Python.

Un algorithme de tri place les éléments d'une liste dans un ordre particulier. Ils aident à réduire la complexité d'un problème et peuvent même optimiser d'autres algorithmes.

En raison de sa complexité, le tri est l'un des problèmes les plus importants en informatique. En un mot, le tri peut être défini comme l'organisation d'éléments dans une séquence ordonnée. Même si l'idée des algorithmes de tri semble simple au premier abord, ce n'est pas le cas ; les recherches à ce sujet ont commencé il y a 70 ans.

Écrire une bonne fonction de tri par vous-même n'est pas facile. Heureusement, Python est livré avec des fonctions de tri intégrées. Cet article explorera comment utiliser sort() et sorted() pour trier par ordre alphabétique en Python.

Un bref exemple de tri en Python

Les algorithmes de tri ont un large éventail d'applications. Par exemple, les organisations gouvernementales, les entreprises commerciales et les institutions financières organisent toutes leurs données en les triant. Le stockage de données triées facilite la recherche ultérieure des algorithmes.

Alors, comment trier exactement une liste par ordre alphabétique en Python ? Prenons un exemple rapide.

Remarque : Si vous ne savez pas ce qu'est une liste et pourquoi il s'agit d'une structure de données Python très importante, consultez notre article Python Lists, Tuples, and Sets. Vous pouvez également vous référer aux termes Python que les débutants devraient connaître, parties 1 et 2 pour plus d'informations. Enfin, je vous encourage à vous inscrire à notre cours interactif sur la structure de données Python afin de pouvoir mettre en pratique ces nouvelles compétences.

Retour au tri Python. Voici le code pour un tri simple :

>>> mylist = ["world", "LearnPython.com", "pineapple", "bicycle"]
>>> sorted_list = sorted(mylist)
>>> print(sorted_list)
['LearnPython.com', 'bicycle', 'pineapple', 'world']

Ci-dessus, la liste mylist contient les chaînes "monde", "LearnPython.com", "ananas" et "vélo" sans ordre particulier. Nous voulons trier cette liste et la stocker en tant que nouvelle variable appelée sorted_list . En Python, trier une liste par ordre alphabétique est aussi simple que de passer une liste de chaînes au sorted() méthode. Les chaînes sont triées par ordre alphabétique en fonction de leur première lettre (A-Z). Cependant, les mots qui commencent par des lettres majuscules viennent avant les mots qui commencent par des lettres minuscules. (Remarque  :Cela signifie que "Zebra" sera répertorié avant "apple" car "Zebra" commence par une lettre majuscule.)

Maintenant que nous comprenons ce qu'est le tri, nous pouvons commencer avec le code !

Trier une liste par ordre alphabétique en Python avec sort()

Commençons par trier une liste par ordre alphabétique en Python avec le sort() méthode. Par défaut, sort() placera les éléments dans l'ordre croissant (A–Z).

Reprenons la même liste que précédemment :

>>> mylist = ["world", "LearnPython.com", "pineapple", "bicycle"]
>>> mylist.sort()
>>> print(mylist)
['LearnPython.com', 'bicycle', 'pineapple', 'world']

Cependant, notez que le sort() la méthode va directement modifier la liste initiale d'éléments et qu'il ne sera pas possible d'annuler les modifications.

Si vous souhaitez trier les éléments dans l'ordre décroissant (Z–A), vous pouvez le faire en définissant le paramètre inverse dans sort() comme True ou False .

>>> mylist = ["world", "LearnPython.com", "pineapple", "bicycle"]
>>> mylist.sort(reverse=True)
>>> print(mylist)
['world', 'pineapple', 'bicycle', 'LearnPython.com']

Et c'est reparti! mylist est maintenant trié par ordre décroissant.

Il est important de noter que le sort() la fonction trie en place, c'est-à-dire sans encombrement supplémentaire. D'après Wikipédia :

Un algorithme sur place transforme les données d'entrée sans avoir besoin de structures auxiliaires.

L'idée derrière un algorithme sur place est l'efficacité de l'espace. En d'autres termes, nous voulons utiliser le minimum de ressources matérielles pour accomplir la tâche. Essentiellement, la sortie est produite dans le même espace mémoire qui contient l'entrée; les données sont successivement transformées en place. Cela évite d'utiliser deux fois le stockage en conservant une copie de l'entrée.

Alors, devriez-vous utiliser trier() ?

Si vous travaillez avec des données importantes et qu'il est même possible que vous deviez récupérer les données d'origine à l'avenir, alors sort() n'est pas la meilleure option car elle modifie la liste d'origine.

En revanche, si les données sont une copie ou des données de travail sans importance, alors sort() peut être une bonne option. Une autre option consiste à utiliser sorted() à la place.

Trier une liste par ordre alphabétique en Python avec sorted()

Python a aussi la fonction sorted() , que nous avons utilisé dans l'exemple d'ouverture. Contrairement à sort() , cette méthode ne modifie pas la liste d'origine ; il retourne une nouvelle liste avec le même contenu que la liste originale mais par ordre alphabétique. Par exemple :

>>> new_list = ["Python", "welcome", "hello", "programming", "sorting", "zebra", "alligator"]
>>> sort_newlist = sorted(new_list)
>>> print(sort_newlist)
['Python', 'alligator', 'hello', 'programming', 'sorting', 'welcome', 'zebra']

Ici, les new_list triés est stocké dans une variable appelée sort_newlist . Nous pouvons toujours accéder au new_list variables.

Similaire à sort() , sorted() a aussi un reverse argument qui est False par défaut. Définissons-le sur True pour réorganiser new_list par ordre décroissant :

>>> new_list = ["Python", "welcome", "hello", "programming", "sorting", "zebra", "alligator"]
>>> sort_newlist = sorted(new_list, reverse=True)
>>> print(sort_newlist)
['zebra', 'welcome', 'sorting', 'programming', 'hello', 'alligator', 'Python']

Trier une liste par ordre alphabétique en Python avec clé

Par défaut sort() et sorted() utiliser l'opérateur de comparaison < . Vous pouvez modifier l'ordre utilisé lors du tri en spécifiant l'argument clé.

Précédemment, nous avons vu que sort() et sorted() donner la priorité aux chaînes en majuscules. Cependant, nous pourrions souhaiter un tri insensible à la casse. Cela peut être fait en définissant l'argument clé sur str.lower (qui convertit toutes les chaînes en caractères minuscules). Pour utiliser ce type de tri sur vos données, vous aurez besoin d'une fonction ou de tout autre appelable qui prend un argument et renvoie une clé utilisée pour le tri. Cette technique est rapide car la fonction clé n'est appelée qu'une seule fois pour chaque entrée.

>>> mylist = ["world", "LearnPython.com", "pineapple", "bicycle", "Anaconda", "Jupyter"]
>>> mylist.sort(key=str.lower)
>>> print(mylist)
['Anaconda', 'bicycle', 'Jupyter', 'LearnPython.com', 'pineapple', 'world']

Et de même avec sorted() :

>>> mylist = ["world", "LearnPython.com", "pineapple", "bicycle", "Anaconda", "Jupyter"]
>>> sort_mylist = sorted(mylist, key=str.lower)
>>> print(sort_mylist)
['Anaconda', 'bicycle', 'Jupyter', 'LearnPython.com', 'pineapple', 'world']

Nous pouvons également utiliser un lambda personnalisé fonctionner comme argument clé. Disons que j'ai une liste de tuples contenant les noms, la profession et l'emplacement des personnes. Nous voulons les trier par ordre croissant en fonction du deuxième élément de chaque tuple. Cela peut être fait avec un lambda personnalisé fonction :

>>> people = [('Anna', 'New York', 'Data Analyst'),('Chris', 'Berlin', 'Software Developer'),('Nancy', 'Toronto', 'Data Scientist')]
>>> sorted_people = sorted(people, key=lambda x: x[1])
>>> print(sorted_people)
[('Chris', 'Berlin', 'Software Developer'), ('Anna', 'New York', 'Data Analyst'), ('Nancy', 'Toronto', 'Data Scientist')]

La sortie est une liste triée par ordre alphabétique en fonction de la ville car x[1] accède au deuxième élément du tuple (c'est-à-dire le nom de la ville). Vous pouvez en savoir plus sur la façon de faire des tris lambda en Python dans mon article précédent sur les fonctions de tri personnalisées.

Regardons l'exemple ci-dessus, mais cette fois avec sort() :

>>> people = [('Anna', 'New York', 'Data Analyst'),('Chris', 'Berlin', 'Software Developer'),('Nancy', 'Toronto', 'Data Scientist')]
>>> people.sort(key=lambda x: x[1])
>>> print(people)
[('Chris', 'Berlin', 'Software Developer'), ('Anna', 'New York', 'Data Analyst'), ('Nancy', 'Toronto', 'Data Scientist')]

Le résultat est le même, mais nous n'avons plus accès à la liste des personnes d'origine.

La stabilité des algorithmes de tri de Python

Enfin, sort() et sorted() sont garantis stables. Le tri stable signifie que deux objets avec des clés identiques apparaissent dans le même ordre dans la sortie triée que dans l'entrée d'origine. En d'autres termes, un tri stable garantit que l'ordre d'origine des données de même rang est conservé dans la sortie.

La stabilité d'un algorithme de tri permet la possibilité de plusieurs versions différentes correctement triées de la liste d'origine.

Des algorithmes de tri stables sont essentiels pour maintenir l'ordre des éléments égaux. Pour être considérés comme tels, ils ne doivent pas modifier l'ordre relatif des éléments qui sont comparés. Cela aide pour le tri, par exemple, si nous devons le faire en plusieurs passes (comme le tri par ville et profession) ou quelque chose comme ça.

D'un autre côté, un tri non stable pourrait mélanger un élément tout en triant par un autre. Dans ce cas, le tri par ville peut modifier l'ordre des noms, ce qui donne une liste dans laquelle les personnes sont triées par ville, mais dans une ville, elles ne sont pas triées par nom, même si elles ont été triées par nom à l'origine.

Ceci est particulièrement important lorsque vous traitez des listes plus complexes. Par exemple, vous pouvez avoir une liste de tuples avec une chaîne comme premier élément. Vous pouvez trier la liste par ordre alphabétique en fonction du premier argument, mais l'ordre d'origine du deuxième argument de chaque tuple est conservé.

Prêt à pratiquer le tri en Python ?

Cet article a exploré comment trier une liste par ordre alphabétique en Python. Nous avons découvert comment utiliser sort() and sorted() trier en Python et comment ils diffèrent les uns des autres. Nous avons également brièvement abordé la stabilité des algorithmes de tri en Python.

Maintenant que vous avez de solides connaissances sur le tri en Python, allez-y et implémentez vos propres solutions en jouant avec les extraits de code ci-dessus.

Enfin, n'oubliez pas de consulter notre cours interactif sur les algorithmes intégrés en Python. Il vous donne une pratique solide et pratique de la programmation avec Python. Vous pouvez également visiter LearnPython.com pour en savoir plus sur nos cours Python.