set(list_of_objects)
odstraní duplikáty pouze v případě, že víte, co je duplikát, to znamená, že budete muset definovat jedinečnost objektu.
Chcete-li to provést, musíte objekt nastavit jako hašovatelný. Musíte definovat oba __hash__
a __eq__
metodou, zde je postup:
http://docs.python.org/glossary.html#term-hashable
Pravděpodobně však budete muset definovat pouze __eq__
metoda.
UPRAVIT :Jak implementovat __eq__
metoda:
Budete potřebovat znát, jak jsem již zmínil, definici jedinečnosti vašeho objektu. Předpokládejme, že máme knihu s atributy jméno autora a název, jejichž kombinace je jedinečná (takže můžeme mít mnoho knih, které napsal Stephen King, a mnoho knih s názvem The Shining, ale pouze jednu knihu s názvem The Shining od Stephena Kinga), pak implementace je následující:
def __eq__(self, other):
return self.author_name==other.author_name\
and self.title==other.title
Podobně někdy implementuji __hash__
metoda:
def __hash__(self):
return hash(('title', self.title,
'author_name', self.author_name))
Můžete zkontrolovat, že pokud vytvoříte seznam 2 knih se stejným autorem a názvem, objekty knihy budou stejné (s rovná se (s is
operátor) a==
operátor). Také, když set()
je použita, odebere se jedna kniha.
UPRAVIT :Toto je jeden můj starý odpovědník, ale teprve teď jsem si všiml, že obsahuje chybu, která je opravena přeškrtnutím v posledním odstavci:objekty se stejným hash()
nedá True
ve srovnání s is
. Hashabilita objektů se však používá, pokud je zamýšlíte použít jako prvky sady nebo jako klíče ve slovníku.