6

簡単なコード:

>>> set([2,2,1,2,2,2,3,3,5,1])
set([1, 2, 3, 5])

OK、結果のセットに重複はありません。リスト内のオブジェクトが int ではなく、私が定義したものである場合はどうなりますか? それらが異なるかどうかを理解するためにどのような方法でチェックしますか? いくつかのオブジェクトで __eq__ と __cmp__ を実装しましたが、setはそれらを使用していないようです:\

これを解決する方法を知っている人はいますか?

4

1 に答える 1

13

セットのドキュメントによると、要素はハッシュ可能でなければなりませ

オブジェクトが存続期間中に変更されないハッシュ値を持ち (__hash__()メソッドが必要)、他のオブジェクトと比較できる ( __eq__()or__cmp__()メソッドが必要) 場合、そのオブジェクトはハッシュ可能です。等しいと比較される Hashable オブジェクトは、同じハッシュ値を持つ必要があります。

EDIT : Roberto のおかげで、適切な Hashable 定義が追加されました

于 2008-12-08T23:08:24.893 に答える