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 :
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)
[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.
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)
[1, 2, 3, 4, 5]
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)
[1, 2, 3, 4, 5]
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)
[1, 2, 3, 4, 5]
set()
est rapide mais ne préserve pas l'ordre.append()
ou dict.fromkeys()
préservent l'ordre, mais peuvent être légèrement plus lents pour les grandes listes.set
est élégante et conserve l'ordre, tout en étant plus rapide que la méthode avec une boucle explicite.