user
En Python, comment supprimer les doublons d'une liste ?
alphonsio

La meilleure option pour supprimer les doublons d'une liste est de la transformer en set (qui ne peut pas contenir de doublons), puis de revenir en liste :

ma_liste_sans_doublons = list(set(ma_liste))

En Python, il existe plusieurs façons de supprimer les doublons d'une liste. Voici quelques méthodes courantes :

Option 1 : Utiliser un ensemble (set)

Les ensembles (set) ne permettent pas de doublons, donc la conversion d'une liste en un ensemble élimine automatiquement les doublons. Cependant, cette méthode ne préserve pas l'ordre d'origine.

ma_liste = [1, 2, 2, 3, 4, 4, 5]
ma_liste_sans_doublons = list(set(ma_liste))
print(ma_liste_sans_doublons)

Sortie possible (ordre non garanti) :

[1, 2, 3, 4, 5]

Set est un des quatre types natifs de Python permettant de stocker des collections de données. Les autres sont les listes, les dictionnaires et les tuples.


Option 2 : Utiliser une boucle tout en préservant l'ordre

Si l'on souhaite supprimer les doublons tout en conservant l'ordre d'origine des éléments, on peut utiliser une boucle et une liste vide pour ajouter uniquement les éléments uniques.

ma_liste = [1, 2, 2, 3, 4, 4, 5]
ma_liste_sans_doublons = []
for element in ma_liste:
    if element not in ma_liste_sans_doublons:
        ma_liste_sans_doublons.append(element)
print(ma_liste_sans_doublons)

Sortie :

[1, 2, 3, 4, 5]

Option 3 : Utiliser un dict.fromkeys()

En Python 3.7 et versions ultérieures, les dictionnaires conservent l'ordre d'insertion. On peut donc utiliser cette méthode pour éliminer les doublons tout en préservant l'ordre.

ma_liste = [1, 2, 2, 3, 4, 4, 5]
ma_liste_sans_doublons = list(dict.fromkeys(ma_liste))
print(ma_liste_sans_doublons)

Sortie :

[1, 2, 3, 4, 5]

Option 4 : Utiliser une compréhension de liste avec set

Cette méthode est une variante qui combine un ensemble pour vérifier les doublons, mais elle utilise une compréhension de liste pour parcourir la liste tout en conservant l'ordre.

ma_liste = [1, 2, 2, 3, 4, 4, 5]
vue = set()
ma_liste_sans_doublons = [x for x in ma_liste if not (x in vue or vue.add(x))]
print(ma_liste_sans_doublons)

Sortie :

[1, 2, 3, 4, 5]

Comparaison des méthodes :

  • set() est rapide mais ne préserve pas l'ordre.
  • Boucle avec append() ou dict.fromkeys() préservent l'ordre, mais peuvent être légèrement plus lents pour les grandes listes.
  • Compréhension de liste avec set est élégante et conserve l'ordre, tout en étant plus rapide que la méthode avec une boucle explicite.