Tuto Python : Comment trier une liste de tuples ?

Table des matières

Introduction

  1. Comment trier une liste de tuples ?
  2. Comment trier une liste de tuples en fonction d'un élément ou d'une valeur personnalisée ?
  3. Trier un tuple de python en toute simplicité
  4. Trier une liste de listes ou de tuples
  5. Trier une liste de tuples par deuxième article

5.1. Utiliser le tri à bulles

  1. Exercice

6.1. Exercice 1

6.2. Exercice 2

  1. Solution

7.1. Exercice 1

7.2. Exercice 2

Conclusion

Introduction :

Avez-vous déjà essayé de trier une liste de tuples ? Et quand vous avez vu le résultat, ce n'était pas tout à fait ce que vous attendiez ? Eh bien, cela m'est arrivé lorsque j'ai approfondi mon étude du python, et je suppose que cela t'est également arrivé puisque tu cherches une solution. Pour moi, cela montre que vous êtes un programmeur Python avancé !

1. Comment trier une liste de tuples ?

Utilisez la fonction intégrée sorted() de Python ou appelez la méthode sort() sur la liste que vous voulez trier. Ces deux méthodes ont une clé de paramètre optionnelle qui attend une fonction. Passez une fonction ici, qui calcule une valeur clé de chaque tuple de la liste pour trier les tuples selon leurs valeurs clés calculées. Exemple de tri d'une liste de tuples en fonction de leur deuxième entrée

Syntaxe :


liste = [(1, 2), (2, 3), (0, 3)]
liste.sort(key=lambda x: x[1])
print(liste)

Résultats :

2. Comment trier une liste de tuples en fonction d'un élément ou d'une valeur personnalisée ?

Commençons par exposer notre problème plus en détail : Nous avons une liste de tuples que nous voulons trier par leur deuxième élément ou somme d'éléments ou tout autre élément qui n'est pas le premier de la liste. Le comportement par défaut de sort() et sorted() est d'utiliser la première entrée de chaque tuple comme critère de tri.

Supposons que nous voulions trier une liste d'articles comme celle-ci :


articles = [
("pomme", 1.5),
("poire", 2.3),
("oeuf", 0,5),
("cerise", 0,2),
]

Syntaxe :


articles = [
("pomme", 1.5),
("poire", 2.3),
("oeuf", 0,5),
("cerise", 0,2),
]
articles.sort()
print(articles)

Résultat d’exécution :

Nous pourrions trier les tuples soit par leur premier élément, qui est le nom, soit par leur deuxième élément, le prix de l'article. Pour ce faire, nous pourrions écrire une fonction de tri personnalisée. Mais ce ne serait pas très python.

Nous voulons plutôt utiliser les fonctions intégrées que Python fournit. C'est pourquoi nous avons des options :

  • Appeler sort() sur la liste via items.sort()
  • Utiliser sorted() pour trier la liste via sorted_items = sorted(items)

La différence entre les deux options est que la première trie la liste en place et la seconde crée une nouvelle instance de liste et ajoute les éléments triés à cette nouvelle instance. Dans les deux cas, vous obtenez donc une liste triée. Si vous devez conserver l'état initial de la liste, utilisez sorted() dans tous les autres cas, vous préférerez appeler sort() directement sur la liste. Dans les deux cas, la liste sera triée par défaut en Python : La première entrée de chaque tuple.

Pour remplacer le comportement par défaut, nous utilisons la clé de paramètre optionnelle qui est fournie par sort() et sorted(). La clé de paramètre attend une fonction qui peut calculer une valeur à partir d'un tuple. Il est très courant d'utiliser un lambda pour remplacer le comportement par défaut. Si vous n'êtes pas encore familier avec les lambdas de Python, lisez toutes les connaissances de base dans cet article.

Pour trier les éléments de la liste selon la deuxième entrée des tuples, nous écrivons :

element.sort(key=lambda x: x[1])

ou si vous souhaitez conserver l'ordre initial des objets :

nv_liste = sorted(element, key=lambda x: x[1])

Notre fonction clé prend un tuple x et renvoie sa deuxième entrée, ainsi, l'ordre final de la liste ne prendra en compte que la deuxième entrée de chaque tuple. Nous pourrions également écrire :

element.sort(key=lambda x: sum(x))

Pour trier les tuples par la somme de leurs entrées. Bien sûr, cela n'est pas applicable à notre exemple, puisque les entrées de nos tuples sont des chaînes de caractères et des entiers.

Enfin, il est également important d'être conscient du comportement par défaut de Python pour le tri des listes de tuples. Cela n'a pas de sens d'écrire :

element.sort(key=lambda x: x[0])

3. Trier un tuple de python en toute simplicité :

Comme les tuples sont des tableaux que vous ne pouvez pas modifier, ils n'ont pas de fonction de tri en place qui peut être appelée directement sur eux. Ils doivent toujours utiliser la fonction de tri pour renvoyer une liste triée.

Syntaxe :


tupl = (3, 6, 8, 2, 78, 1, 23, 45, 9)
sorted(tupl)

Résultat d’exécution :

Remarquez comment un tableau trié renvoie un tableau.

Bon, voyons maintenant comment trier quelque chose d'un peu plus compliqué.

4. Trier une liste de listes ou de tuples :

C'est un peu plus compliqué, mais c'est quand même assez facile, alors ne vous inquiétez pas ! La fonction de tri et la fonction de tri prennent toutes deux en compte un argument de mot-clé appelé clé.

Le mot-clé permet de spécifier une fonction qui renvoie ce par quoi vous souhaitez que vos articles soient triés. La fonction reçoit un argument "invisible" qui représente un élément de la liste et renvoie une valeur que vous souhaitez utiliser comme "clé" pour le tri.

Laissez-moi illustrer, pour vos superbes yeux seulement, l'argument du mot-clé !

Prenons donc une nouvelle liste et testons-la en la triant par le premier élément de chaque sous-liste

Syntaxe :


def getKey(element):
return element[0]
l = [[2, 8], [6, 3], [3, 24], [24, 86], [1, 100]]
sorted(l, key=getKey)

Résultat d’exécution :

On peut voir ici que la liste est maintenant triée par le premier élément de la sous-liste en ordre croissant. Notez que vous auriez pu utiliser la fonction de tri également, mais personnellement, je préfère la fonction de tri, je l'utiliserai donc dans d'autres exemples.

Que s'est-il passé ? Vous vous souvenez de cet argument "invisible" dont je parlais ? C'est ce qui est passé dans la fonction getKey chaque fois que la fonction triée a besoin d'une valeur.

Le tri par le deuxième élément de chaque sous-liste serait aussi simple que de changer la fonction getKey pour celle-ci :

Syntaxe :

def getKey(element):
return element[1]
l = [[2, 8], [6, 3], [3, 24], [24, 86], [1, 100]]
sorted(l, key=getKey)

Résultat d’exécution :

Très bien. Tout va bien. Maintenant, que diriez-vous d'une liste de tuples ?

En fait, c'est exactement la même chose que notre exemple ci-dessus, mais la liste est définie comme telle :

Syntaxe :


a = [(5, 3), (6, 45), (3, 20), (9, 64), (1, 87)]
sorted(a, key=getKey)

Résultat d’exécution :

La seule chose qui a changé, c'est que nous recevons maintenant une liste de tuples au lieu d'une liste de listes qui nous est renvoyée.

5. Trier une liste de tuples par deuxième article :

5.1. Utiliser le tri à bulles :

En utilisant la technique du Tri à Bulles, nous pouvons effectuer le tri. Notez que chaque tuple est un élément de la liste donnée. Accédez au deuxième élément de chaque tuple en utilisant les boucles imbriquées. Cela permet d'effectuer la méthode de tri sur place. La complexité temporelle est similaire à celle du Tri à Bulles, c'est-à-dire O(n^2).

Syntaxe :

def Sort_Tuple(tup):
lst = len(tup)
for i in range(0, lst):
for j in range(0, lst-i-1):
if (tup[j][1] > tup[j + 1][1]):
temp = tup[j]
tup[j]= tup[j + 1]
tup[j + 1]= temp
return tup
tup =[('noveau', 24), ('je', 10), ('membre', 28),
('bonjour', 5), ('un', 20), ('suis', 15)]
print(Sort_Tuple(tup))

Résultat d’exécution :

6. Exercice :

6.1. Exercice 1 :

en utilisant la méthode sort(), triez le tuple suivant :

tup = [('samir', 10), ('bilal', 5), ('mina', 20), ('laura', 15)] 

Affichez les résultats.

6.2.  Exercice 2 :

En utilisant la méthode sorted(), triez le tuple suivant

tup = [('samir', 10), ('bilal', 5), ('mina', 20), ('laura', 15)] 

Affichez les résultats.

7. Solution

7.1. Exercice 1 :

Syntaxe :


def Sort_Tuple(tup):
tup.sort(key = lambda x: x[1])
return tup
tup = [('samir', 10), ('bilal', 5), ('mina', 20), ('laura', 15)]
print(Sort_Tuple(tup))

Résultats de l’affichage :

7.2. Exercice 2 :

Syntaxe :


def Sort_Tuple(tup):
return(sorted(tup, key = lambda x: x[1]))
tup = [('samir', 10), ('bilal', 5), ('mina', 20), ('laura', 15)]
print(Sort_Tuple(tup))

Résultats de l’affichage :

Conclusion

Python fournit tout ce dont vous avez besoin pour trier facilement des listes de tuples sans avoir à écrire de fonctions de tri personnalisées. Il vous suffit de définir la fonction-clé qui calcule une valeur pour chaque tuple en fonction de laquelle ils doivent être triés.

Article publié le 26 Février 2021par Mouhtat Bilal