Comment dédupliquer une liste en Python

  1. Dédupliquer une liste Python sans préserver l’ordre
  2. Déduplication d’une liste Python avec préservation de l’ordre

Parfois en Python, nous avons une liste de valeurs, dont certaines sont des doublons. C’est un cas d’utilisation courant pour supprimer tous les doublons de la liste, de sorte que toutes les autres valeurs de la liste sont uniques.

Nous pouvons y parvenir en utilisant différentes méthodes, dont certaines préservent le l’ordre original des éléments, alors que d’autres ne le font pas.

Dédupliquer une liste Python sans préserver l’ordre

Si ce n’est pas une exigence pour préserver l’ordre original, nous pouvons dédupliquer une liste en utilisant la structure de données intégrée set. set est une structure de données qui ne peut contenir que des éléments uniques par conception.

En construisant un tel set à partir de notre liste initiale, tous les éléments dupliqués sont ignorés. Ensuite, nous pouvons convertir l’ensemble en une liste et nous obtiendrons une liste d’éléments uniques.

Malheureusement, l’ordre des éléments change, puisque la déduplication de la structure de données set est implémentée en utilisant des tables de hachage, qui ne pas se souvenir des éléments qui ont été insérés en premier.

>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> unique_set = set(names)
>>> unique_list = list(unique_set)
>>> unique_list
['Stacy', 'Sarah', 'Jim', 'Bob']

Si vous utilisez le paquet NumPy pour le calcul scientifique en Python, vous pouvez aussi utiliser la fonction numpy.unique().

>>> import numpy
>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim'] 
>>> numpy.unique(names).tolist()
['Bob', 'Jim', 'Sarah', 'Stacy']

Notez que la méthode ci-dessus ne préserve pas non plus l’ordre original des éléments. La méthode NumPy qui préserve l’ordre est plus impliquée, et vous pouvez la trouver ci-dessous.

Déduplication d’une liste Python avec préservation de l’ordre

Une solution simple, qui permet de préserver l’ordre initial, est d’utiliser une double boucle pour chaque boucle.

La première boucle traverse tous les éléments de la liste initiale. La seconde boucle vérifie si nous avons déjà vu un élément avec la même valeur.

Si ce n’est pas le cas, nous l’ajoutons à la liste unique, qui, à la fin, contiendra des éléments uniques dans l’ordre original.

>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> unique = []
>>> for name in names:         # 1st loop
...   if name not in unique:   # 2nd loop
...     unique.append(name)
...
>>> unique
['Bob', 'Stacy', 'Sarah', 'Jim']

Une autre façon de dédupliquer une liste tout en préservant l’ordre original est d’utiliser la structure de données collections.OrderedDict. OrderedDict est un type spécial de structure de données de dictionnaire en Python, qui se souvient de l’ordre d’insertion de la clé.

>>> from collections import OrderedDict
>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> unique = list(OrderedDict.fromkeys(names))
>>> unique
['Bob', 'Stacy', 'Sarah', 'Jim']

Si vous utilisez la bibliothèque d’analyse de données Python Pandas, pandas.unique peut aussi être utile. Cette méthode permet de préserver l’ordre.

>>> import pandas
>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> pandas.unique(names).tolist()
['Bob', 'Stacy', 'Sarah', 'Jim']

La méthode de NumPy pour dédupliquer une liste tout en préservant l’ordre est un peu plus compliquée. Vous devez vous souvenir d’un index de chaque élément distinct et ensuite recréer une liste unique de l’original en utilisant de tels indices.

>>> import numpy
>>> names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
>>> _, indexes = numpy.unique(names, return_index=True)
>>> unique = [names[i] for i in numpy.sort(indexes)]
>>> unique
['Bob', 'Stacy', 'Sarah', 'Jim']

Article connexe - Python List

  • Quelle est la différence entre les méthodes de liste append et extend
  • Comment convertir une liste en chaîne de caractères en Python
  • Comment concaténer deux ou plusieurs listes en Python
  • Quelle est la différence entre del, remove et pop sur les listes Python
  • Comment vérifier rapidement si une valeur existe dans une liste Python
  • Comment aplatir une liste en Python
  • Comment créer une liste avec une taille spécifique en Python
  • comments powered by Disqus