的set(list_of_objects)
如果你知道一個重複的是什麼,只會刪除重複的,也就是說,你需要定義一個對象的唯一性。
爲了做到這一點,您需要使對象可哈希。您需要定義兩個__hash__
和__eq__
方法,這裏是如何:
http://docs.python.org/glossary.html#term-hashable
雖然,你可能只需要定義__eq__
方法。
編輯:如何實現__eq__
方法:
你需要知道,正如我所說,你的對象的唯一性定義。假設我們有一本帶有屬性author_name和title的書,它們的組合是獨一無二的(所以我們可以有很多Stephen King編寫的書,還有很多書叫做The Shining,但只有一本書叫Stephen King的Shining),那麼實現如下:
def __eq__(self, other):
return self.author_name==other.author_name\
and self.title==other.title
同樣的,這是我有時實施__hash__
方法:
def __hash__(self):
return hash(('title', self.title,
'author_name', self.author_name))
您可以檢查,如果你創建的兩本書用相同的作者和書名,書列表對象將是相同的(與is
運營商)和等於(與==
運營商)。此外,當使用set()
時,它將刪除一本書。
編輯:這是我的一個老anwser,但我現在才發現,它具有與刪除線最後一段更正錯誤:與同hash()
對象時is
相比不會給True
。但是,如果您打算將它們用作集合的元素,或者將其用作字典中的鍵,則可以使用對象的可哈希性。
步驟1.搜索。在Python編程類中每學期都會使用這種確切的措詞。請搜索。 – 2010-11-12 21:38:45
__leaving original__,這是什麼意思?因爲如果像你說過的那樣,你希望__維護列表中的order__,那麼列表中第一次出現重複對象將是原始權利? – mouad 2010-11-12 21:56:24
是的,我的意思是我想刪除除原來的所有副本。 @ S.Lott,我搜索了很多東西,但沒有找到任何東西,這就是我來到這裏的原因。你能舉出一個解決這個確切問題的例子嗎?我很樂意看到它。 – imns 2010-11-12 22:25:22