Le set(list_of_objects)
ne supprime les doublons si vous savez ce qu'est un double est, qui est, vous aurez besoin de définir une unicité d'un objet.
Afin de faire cela, vous devrez rendre l'objet lavable. Vous devez définir à la fois la méthode __hash__
et __eq__
, voici comment:
http://docs.python.org/glossary.html#term-hashable
Bien que, vous aurez probablement besoin de définir la méthode __eq__
.
EDIT: Comment mettre en œuvre la méthode __eq__
:
Vous aurez besoin de savoir, comme je l'ai mentionné, la définition unique de votre objet. Supposé que nous avons un livre avec les attributs author_name et le titre que leur combinaison est unique, (donc, nous pouvons avoir beaucoup de livres Stephen King écrit, et de nombreux livres nommés The Shining, mais seulement un livre nommé The Shining par Stephen King), puis la mise en œuvre est comme suit:
def __eq__(self, other):
return self.author_name==other.author_name\
and self.title==other.title
de même, voilà comment je parfois mettre en œuvre la méthode __hash__
:
def __hash__(self):
return hash(('title', self.title,
'author_name', self.author_name))
vous pouvez vérifier que si vous créez une liste de 2 livres de même auteur et le titre, le livre les objets seront être le même (avec opérateur is
) et égal (avec l'opérateur ==
). En outre, quand set()
est utilisé, il enlèvera un livre.
EDIT: C'est une ancienne anwser de moi, mais je ne remarque maintenant qu'il a l'erreur qui est corrigée avec biffés dans le dernier paragraphe: objets avec le même hash()
ne donnera pas True
par rapport à is
. La Hashabilité de l'objet est cependant utilisée si vous avez l'intention de les utiliser en tant qu'éléments d'un ensemble, ou en tant que clés dans un dictionnaire.
Étape 1. Recherche. Cette formulation exacte est utilisée chaque semestre dans la classe de programmation Python. S'il vous plaît chercher. –
__en sortant l'original__, qu'est-ce que cela signifie? car si, comme vous l'avez dit, vous voulez __ maintenir l'ordre__ de la liste, la première occurrence d'un objet dupliqué dans la liste sera le droit d'origine? – mouad
oui, je voulais juste dire que je veux supprimer tous les doublons, sauf pour l'original. @ S.Lott, j'ai cherché une tonne et je n'ai rien trouvé, c'est pourquoi je suis venu ici. Pouvez-vous citer un exemple qui aborde ce problème précis? Je serais heureux de le voir. – imns