1194 votes

Python supprimant les doublons dans les listes

J'ai donc besoin d'écrire un programme pour vérifier si une liste contient des doublons et si c'est le cas, elle les supprime et renvoie une nouvelle liste avec les éléments qui n'ont pas été dupliqués / supprimés. C'est ce que j'ai mais pour être honnête je ne sais pas quoi faire.

 def remove_duplicates():
    t = ['a', 'b', 'c', 'd']
    t2 = ['a', 'c', 'd']
    for t in t2:
        t.append(t.remove())
    return t
 

1918voto

poke Points 64398

L'approche la plus répandue pour obtenir une collection unique d'objets est d'utiliser un set. Les ensembles sont non ordonnée collections distinctes des objets. Pour créer un jeu à partir de n'importe quel itérable, vous pouvez tout simplement passer à la bâtie-en set() fonction. Si plus tard vous avez besoin d'une vraie liste de nouveau, vous pouvez même passer l'ensemble de l' list() fonction.

L'exemple suivant devrait couvrir ce que vous essayez de faire:

>>> t = [1, 2, 3, 1, 2, 5, 6, 7, 8]
>>> t
[1, 2, 3, 1, 2, 5, 6, 7, 8]
>>> list(set(t))
[1, 2, 3, 5, 6, 7, 8]
>>> s = [1, 2, 3]
>>> list(set(t) - set(s))
[8, 5, 6, 7]

Comme vous pouvez le voir dans l'exemple, la commande d'origine ne l'est pas. Comme mentionné ci-dessus, les jeux eux-mêmes sont des collections non triées, de sorte que la commande est perdu. Lors de la conversion d'un retour à une liste, un ordre arbitraire est créé.

Si l'ordre est important pour vous, alors vous devrez utiliser un autre mécanisme. Cette question couvre ce sujet plus en détail.

447voto

Raymond Hettinger Points 50330

FWIW, le nouveau moyen (Python v2.7) pour supprimer les doublons d'un itérable tout en le gardant dans l'ordre original est:

 >>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys('abracadabra'))
['a', 'b', 'r', 'c', 'd']
 

202voto

9000 Points 13242

C'est un one-liner: list(set(source_list)) fera l'affaire.

Un set est quelque chose qui ne peut pas avoir de doublons.

107voto

Neeraj Points 201
>>> t = [1, 2, 3, 1, 2, 5, 6, 7, 8]
>>> t
[1, 2, 3, 1, 2, 5, 6, 7, 8]
>>> s = []
>>> for i in t:
       if i not in s:
          s.append(i)
>>> s
[1, 2, 3, 5, 6, 7, 8]

95voto

Brendan Long Points 24372

Si vous ne vous souciez pas de la commande, faites simplement ceci:

 def remove_duplicates(l):
    return list(set(l))
 

Un set est garanti de ne pas avoir de doublons.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X