はset(list_of_objects)
、重複が何であるかを知っている場合にのみ重複を削除します。つまり、オブジェクトの一意性を定義する必要があります。
そのためには、オブジェクトをハッシュ可能にする必要があります。__hash__
と__eq__
メソッドの両方を定義する必要があります。方法は次のとおりです。
http://docs.python.org/glossary.html#term-hashable
__eq__
ただし、おそらくメソッドを定義するだけで済みます。
編集:メソッドを実装する__eq__
方法:
前述したように、オブジェクトの一意性の定義を知る必要があります。組み合わせが一意である属性author_nameとtitleを持つ本があると仮定します(したがって、スティーブンキングが作成した多くの本と、シャイニングという名前の本がたくさんありますが、スティーブンキングによるシャイニングという名前の本は1冊だけです)。以下のとおりであります:
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))
同じ著者とタイトルの2冊の本のリストを作成すると、本のオブジェクトが同じ(is
演算子を使用)および等しい(演算子を使用)になることを確認できます==
。また、set()
を使用すると、1冊の本が削除されます。
編集:これは私の古い答えの1つですが、最後の段落の取り消し線で修正されたエラーがあることに気づきました。同じオブジェクトは、と比較すると表示されhash()
ません。ただし、オブジェクトのハッシュ可能性は、セットの要素として、または辞書のキーとして使用する場合に使用されます。True
is