的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