El set(list_of_objects)
sólo eliminará los duplicados si sabes lo que es un duplicado, es decir, tendrá que definir una singularidad de un objeto.
Con el fin de hacer eso, tendrá que hacer el objeto hashable. Es necesario definir tanto el método __hash__
y __eq__
, aquí es cómo:
http://docs.python.org/glossary.html#term-hashable
Sin embargo, es probable que sólo se necesita definir __eq__
método.
EDITAR: Cómo implementar el método __eq__
:
Usted necesita saber, como ya he mencionado, la definición singularidad de su objeto. Suponemos que tenemos un Libro con atributos autor_nombre y título que su combinación es única, (entonces, podemos tener muchos libros creados por Stephen King, y muchos libros llamados The Shining, pero solo un libro llamado The Shining por Stephen King), luego la implementación es el siguiente:
def __eq__(self, other):
return self.author_name==other.author_name\
and self.title==other.title
del mismo modo, así es como a veces me implementar el __hash__
método:
def __hash__(self):
return hash(('title', self.title,
'author_name', self.author_name))
usted puede comprobar que si se crea una lista de 2 libros con un mismo autor y el título, el libro los objetos serán iguales (con el operador is
) y igual (con el operador ==
). Además, cuando se usa set()
, se eliminará un libro.
EDITAR: Esta es una vieja anwser mío, pero sólo ahora cuenta de que tiene el error que se corrige con tachado en el último párrafo: objetos con el mismo hash()
no dará True
en comparación con is
. La capacidad de acceso de objeto se usa, sin embargo, si tiene la intención de usarlos como elementos del conjunto o como claves en el diccionario.
Paso 1. Buscar. Esta redacción exacta se usa cada semestre en la clase de programación de Python. Por favor busca –
__dejando el original__, ¿qué significa esto? porque si, como dijiste, quieres __mantener el pedido__ de la lista para que la primera aparición de un objeto duplicado en la lista sea la derecha original? – mouad
Sí, solo quise eliminar todos los duplicados excepto el original. @ S. Lot, busqué mucho y no encontré nada, por eso vine aquí. ¿Puedes citar un ejemplo que aborde este problema exacto? Me gustaría verlo – imns