我假定類,你給有ISN」? (因爲它毫無價值),但最簡單的事情就是在這裏做 - 假設你的元素的順序對你無關緊要,就是把你的列表變成一個集合,它將刪除所有重複的元素。
>>> a = ["test", "test", "something", "else"]
>>> a
['test', 'test', 'something', 'else']
>>> set(a)
{'test', 'something', 'else'}
這裏我使用了字符串,但是您可以使用任何提供e高質量的算子和散列函數。相等函數用於檢查兩個類是否相同(對於自定義類,您需要定義該類),並使用散列來使集合非常有效。兩個類別給予相同的散列必須是相同的。你可以有兩個相同散列的類不相同(它會回落到相等運算符),但發生的越多,它越慢。通常,使用用於檢查相等性的類組件的哈希總和是生成可靠哈希的好方法。
因此,舉例來說:
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
def __eq__(self, other):
return self.title == other.title and self.author == other.author
def __hash__(self):
return hash(self.title)+hash(self.author)
def __repr__(self):
return "Book("+repr(self.title)+", "+repr(self.author)+")"
我們可以使用這個類像以前一樣。
>>> a = [Book("Some Book", "Some Guy"), Book("Some Book", "Some Guy"), Book("Some Other Book", "Some Other Guy")]
>>> a
[Book('Some Book', 'Some Guy'), Book('Some Book', 'Some Guy'), Book('Some Other Book', 'Some Other Guy')]
>>> set(a)
{Book('Some Other Book', 'Some Other Guy'), Book('Some Book', 'Some Guy')}
如果你關心元素的順序,甚至去除重複之後,那麼你可以這樣做:
def remove_duplicates_preserving_order(seq):
seen = set()
return [ x for x in seq if x not in seen and not seen.add(x)]
這是通過黑客詞典理解一點 - set.add()
總是返回0 ,所以你可以檢查它是否爲假(它總是)將元素添加到集合中。
編輯進行更新:
請注意:PEP-8使用CapWords
上課,並lowercase_with_underscores
當地 變量reccomends 。
您似乎對Python類的工作方式存在誤解。這個類 並沒有多大意義,因爲這些屬性都屬於類屬性,而不是實例 屬性。這意味着它們對於 類的所有實例都是相同的,這不是你想要的。這意味着當你第二次改變它們時,你將會改變它的所有實例,使得它們全都是 。
要創建實例變量(你想要的類型) 構造函數(__init__()
) - 檢查我的示例類,看看它是如何工作的。 完成此操作後,您需要執行__eq__()
和__hash__()
函數,以便Python知道您的類的兩個項目 的含義是否相等。然後你可以使用上面描述的方法(一套或我給的功能 )刪除重複項。
請注意,如果您希望使用這些數據來處理這些問題,那麼可能會導致一個類別過大。 如果你總是將有兩個項目,則可以只使用一個元組:
>>> a = [("Book", "Author"), ("Book", "Author"), ("OtherBook", "OtherAuthor")]
>>> set(a)
{('Book', 'Author'), ('OtherBook', 'OtherAuthor')}
元組已經爲您定義平等作爲其部分的總和。總的來說,你似乎對Python中如何構造和使用類缺乏理解 - 我建議你閱讀並學習如何在其他任何東西之前使用它們,因爲不這樣做會導致很多問題。
該術語將是該課程的對象。 – phg 2012-04-25 09:46:36
或者* instances *也用了很多。 – 2012-04-25 09:56:18