Python >> Tutoriel Python >  >> Python

Comment trier une liste de tuples en Python

Êtes-vous confus quant au tri des listes de tuples en Python ? Vous voulez savoir comment les trier efficacement ? Cette introduction couvrira tout ce que vous devez savoir pour maîtriser ce type de tri.

Les listes et les tuples sont des structures de données essentielles en Python. Dans plusieurs cas, vous devrez peut-être trier une liste de tuples. Cet article vous apprendra comment utiliser la fonction triée () et la méthode sort () et les distinctions entre les deux. Vous apprendrez à trier des tuples en Python et découvrirez comment des paramètres facultatifs tels que key et reverse rendent les capacités de tri de Python plus polyvalentes.

Si vous débutez avec le langage de programmation Python, LearnPython est un moyen facile de commencer votre voyage. Nous vous recommandons de consulter cette piste Python sur les algorithmes intégrés de Python si vous n'êtes pas familier avec les méthodes Python. D'un autre côté, si vous avez des connaissances en Python et que vous souhaitez améliorer vos compétences en codage, nous vous recommandons ce cours sur les structures de données Python.

Pour l'instant, plongeons directement dans les principes fondamentaux du tri d'une liste de tuples en Python.

Initialisation des listes et des tuples

Tout d'abord, qu'est-ce qu'une liste ? Il est facile de confondre les listes avec les tableaux si vous êtes débutant. Cependant, les listes et les tableaux sont des structures de données fondamentalement différentes. Un tableau est une structure de données de longueur fixe, alors qu'une liste est une structure de données de longueur variable qui peut être redimensionné.

En Python,les listes sont modifiables , ce qui signifie qu'ils peuvent être modifiés. Ils peuvent contenir n'importe quel type de données, y compris des chaînes, des tuples et des ensembles. (Consultez cet article pour en savoir plus sur les différences entre les listes, les tuples et les ensembles.) Pour cet article, nous n'utiliserons que des listes de tuples.

Il existe deux façons d'initialiser une liste vide. Tout d'abord, vous pouvez spécifier un ensemble de crochets sans aucune valeur de composant ; cela déclare une liste sans valeurs. Un exemple de cette syntaxe est :

# Method 1
lst = []

Nous pouvons ajouter des valeurs par défaut entre nos crochets. Les listes Python nous permettent d'avoir n'importe quel nombre d'éléments de types différents :

jobs = ['Software Engineer','Data Analyst', 15, True]

Dans l'exemple ci-dessus, nous avons déclaré l'objet liste jobs avec quatre valeurs initiales :‘Software Engineer’ et ‘Data Analyst’ (stocké sous forme de chaînes), 15 (un entier), et la valeur booléenne True .

Une autre façon d'initialiser une liste vide en Python est d'utiliser le list() constructeur. Voici un exemple du list() constructeur en action :

# Method 2
lst = list()

Le list() le constructeur prend un seul argument facultatif appelé iterable . Si aucun paramètre n'est passé au constructeur de liste, le constructeur renvoie une liste vide. Si un iterable est passé, le constructeur renvoie une liste d'éléments itérables.

Les deux approches donnent le même résultat :une liste vide. Il n'y a pas de lignes directrices sur le moment où l'une ou l'autre de ces approches doit être utilisée. Parce qu'il est plus concis, les crochets blancs [] approche est généralement préférée.

Voyons maintenant ce que sont les tuples en Python.

Les tuples, comme les listes, sont des structures de données avec une série ordonnée de zéro ou plusieurs entrées . La principale distinction entre les tuples et les listes est que les tuples ne peuvent pas être modifiés (ils sont immuables); les listes sont modifiables, comme mentionné précédemment.

Une séquence de valeurs séparées par des virgules est utilisée pour initialiser un tuple avec des valeurs. Il existe deux manières d'initialiser un tuple vide, tout comme il existe deux manières de créer une liste. Comme vous pouvez le constater, ces méthodes d'initialisation sont assez similaires :

# Method 1
tup = ()

# Method 2
tup = tuple()

Il est important de se rappeler que vous aurez besoin d'une virgule après votre élément si vous souhaitez générer un tuple avec une seule valeur :

# Tuple with 1 element
tup = (1, ) 

Comprendre lesorted() Fonction

Examinons maintenant le tri en Python.

Trier une liste en Python peut facilement être fait en utilisant sorted(). La fonction triée() renvoie une liste avec des éléments triés par ordre croissant ou décroissant. La syntaxe de cette fonction est :

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

Notez que key et reverse sont deux paramètres optionnels :

  • reverse  :Si ce paramètre est défini sur "True", la liste triée sera inversée ou triée par ordre décroissant.
  • key  :Une fonction qui agit comme une sorte de clé de comparaison.

Comprendre le sort() Méthode

Le sort() La méthode trie les éléments de la liste par ordre croissant (par défaut) ou décroissant.

La syntaxe du sort() méthode est :

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

Par défaut, le reverse l'argument est défini sur False; la méthode triera la liste par ordre croissant. La distinction fondamentale entre sort() et sorted() est-ce que le sort() La fonction trie la liste sur place, c'est-à-dire qu'elle modifie la liste elle-même et renvoie une valeur None. Le sorted() La fonction crée une copie de la liste d'origine, la trie et renvoie cette nouvelle liste, sans modifier la liste d'origine.

Plongeons maintenant dans le tri des listes de tuples en Python.

Trier une liste de tuples avec le sorted() Fonction

Regardons un exemple pour comprendre comment trier les tuples en Python. Considérez la liste de tuples suivante :

sample = [(2, 4, 3), (3, 5, 7), (1, 0, 1)]

Maintenant, appliquons le sorted() fonction :

print(sorted(sample)) 

# Output: [(1, 0, 1), (2, 4, 3), (3, 5, 7)]

L'ordre des tuples dans la liste a changé, comme vous pouvez le voir.

Le sorted() La méthode trie les tuples par défaut, en utilisant le premier élément de chaque tuple. Par conséquent, le premier tuple de la liste triée commence par 0, le second par 2 et le troisième par 3.

Voyons ce qui se passe si le premier élément de chaque tuple est le même :

sample = [(1, 4, 3), (1, 5, 7), (1, 0, 1)]
print(sorted(sample)) 

# Output: [(1, 0, 1), (1, 4, 3), (1, 5, 7)]

Le deuxième élément est le prochain critère de tri utilisé par le sorted() fonction.

Si tous les tuples de la liste ont le même deuxième élément, les tuples sont triés en fonction du troisième élément. Si les premier, deuxième et troisième éléments sont identiques, il utilise le quatrième, et ainsi de suite.

Trier une liste de tuples avec le sort() Méthode

Le sort() peut également être utilisée pour trier les tuples en Python. En commençant par la liste initiale des tuples :

sample = [(2, 4, 3), (3, 5, 7), (1, 0, 1)]
sample.sort()
print(sample) # Output: [(1, 0, 1), (2, 4, 3), (3, 5, 7)]

Notez que la sortie est la même que vous utilisiez sort() ou sorted() . Cependant, sort() change l'objet lui-même, tandis que sorted() renvoie une copie triée de la liste.

Trier une liste par le deuxième élément du tuple

Si vous voulez spécifiquement trier une liste de tuples par un élément donné, vous pouvez utiliser le sort() méthode et spécifiez un lambda fonctionner comme une clé. Malheureusement, Python ne vous permet pas de spécifier directement l'index de l'élément de tri. Au lieu de cela, une fonction doit être définie à l'intérieur du key paramètre, qui aide le sort() méthode identifier quel index choisir. La fonction lambda vous permet de spécifier une fonction de comparateur personnalisée dans le sort() méthode.

Par exemple :

sample = [('Jack', 76), ('Beneth', 78), ('Cirus', 77), ('Faiz', 79)]
sample.sort(key=lambda a: a[1])
print(sample)

Après avoir écrit le code ci-dessus (qui demande à Python de trier la liste des tuples par le deuxième élément), la sortie apparaîtra comme :

# Output: [(‘Jack’, 76), (‘Cirus’, 77), (‘Beneth’, 78), (‘Faiz’, 79)]

Python vous permet également de trier les listes par ordre alphabétique, mais cela sort du cadre de cet article. Cependant, nous vous recommandons de consulter cet article pour en savoir plus sur le tri alphabétique des listes.

Trier une liste de tuples dans l'ordre inverse

Python vous permet de spécifier l'ordre de tri sur votre liste. Par conséquent, nous pouvons simplement utiliser le sort() méthode pour trier une liste. Tout d'abord, nous allons prendre une liste non triée de tuples, puis appeler le sort() méthode. Le sort() la méthode changera l'ordre de croissant (ascendant) à décroissant (décroissant) lorsque nous passons le paramètre reverse=True comme argument.

Prenons un exemple pour voir comment trier une liste par ordre décroissant en utilisant l'argument inverse :

sample = [(1, 0, 0), (4, 1, 2), (4, 2, 5), (1, 2, 1)]
sample.sort(reverse = True)
print(sample) 

# Output : [(4, 2, 5), (4, 1, 2), (1, 2, 1), (1, 0, 0)]

Nous pouvons également trier une liste de tuples en fonction du deuxième élément dans l'ordre inverse :

sample = [('f', 90), ('g', 84), ('d', 92), ('a', 96)]
sample.sort(key = lambda i:i[1], reverse = True)
print(sample) 

# Output : [('a', 96), ('d', 92), ('f', 90), ('g', 84)]

Utiliser sorted() Sans lambda Fonction

Dans l'exemple précédent, nous avons passé un lambda fonction à la clé d'argument facultative du sort() méthode. lambda est une fonction, nous devrions donc pouvoir passer une fonction normale au key dispute. Nous pouvons concevoir une fonction qui imite la fonctionnalité en ligne du lambda fonction.

Définissons une fonction appelée second_item() , qui prend un tuple comme paramètre et renvoie le deuxième élément du tuple.

def second_item(data):
    return data[1]

Et maintenant nous appellerons le sorted() fonction et passez le second_item fonction que nous avions définie précédemment à l'argument clé :

sample = [(1, 7, 3), (4, 9, 6), (7, 3, 9)]
sample.sort(key = select_item)
print(sample) 

# Output : [(7, 3, 9), (1, 7, 3), (4, 9, 6)]

La comparaison des résultats de la section précédente montre que notre résultat est bien correct. Consultez cet article pour approfondir les fonctions de tri Python personnalisées.

Trier une liste de tuples à l'aide de itemgetter

Une autre alternative à l'utilisation de lambda ou passer une fonction personnalisée dans le paramètre clé consiste à utiliser le itemgetter() fonction du module opérateur Python. Avant d'appliquer la fonction, regardons son fonctionnement :

from operator import itemgetter

print(itemgetter(1)((2, 5, 3))) 

# Output : 5

Le itemgetter() La fonction renvoie l'élément en fonction de l'index (dans ce cas, 1) qui lui est transmis. Utilisons maintenant le itemgetter() fonction pour trier notre liste de tuples :

sample = [(1, 7, 3), (4, 9, 6), (7, 3, 9)]
print(sorted(sample, key=itemgetter(1))) 

# Output : [(7, 3, 9), (1, 7, 3), (4, 9, 6)]

De la même manière que nous l'avons vu dans les instances précédentes, le deuxième membre de chaque tuple est utilisé pour trier la liste des tuples

Utiliser deux éléments pour trier une liste de tuples

Jusqu'à présent, nous avons vu comment spécifier un seul élément de tri. Lorsque vous souhaitez trier des tuples en Python, vous pouvez également spécifier deux éléments ou plus à utiliser pour la comparaison.

Nous utiliserons toujours l'argument key optionnel ainsi qu'un lambda fonction. Supposons que nous voulions trier la liste en fonction des deuxième et troisième éléments de chaque tuple.

Nous pouvons utiliser un lambda pour renvoyer un tuple de deux valeurs qui définissent la position des éléments à utiliser pour le tri, lorsqu'un tuple est donné en entrée.

sample = [(2, 4, 7), (3, 0, 1), (3, 0, 0)]
print(sorted(sample, key=lambda x: (x[1], x[2]))) 

# Output : [(3, 0, 0), (3, 0, 1), (2, 4, 7)]

Les tuples de la liste sont triés par le deuxième élément, puis par le troisième élément. Si nous inversions l'ordre des éléments définis dans le lambda, les éléments seraient triés par le deuxième élément puis par le troisième élément.

En Python, trier une liste de tuples est facile

Trier une liste de tuples peut sembler difficile, mais l'inverse est vrai en Python. Python est livré avec tout ce dont vous avez besoin pour trier des listes de tuples sans écrire vos propres fonctions de tri. Il suffit de définir la fonction clé, qui calcule la valeur de tri. Vous avez appris avec succès le tri en Python, en particulier le tri de listes de tuples en Python à l'aide de plusieurs méthodes différentes.