したがって、set.intersection()を使用して2つのセットの共通部分を計算する簡単な方法があります。ただし、次の問題があります。
class Person(Object):
def __init__(self, name, age):
self.name = name
self.age = age
l1 = [Person("Foo", 21), Person("Bar", 22)]
l2 = [Person("Foo", 21), Person("Bar", 24)]
union_list = list(set(l1).union(l2))
# [Person("Foo", 21), Person("Bar", 22), Person("Bar", 24)]
(これObject
は、基本的な機能を実装するORMによって提供される基本クラスで__hash__
あり、基本__eq__
的にクラスのすべてのメンバーをハッシュに追加します。つまり、__hash__
返されるのはクラスのすべての要素のハッシュになります)
.name
この段階では、たとえば、を見つけるためだけに、集合交差演算を実行したいと思いますPerson('Bar', -1).intersection(union_list) #= [Person("Bar", -1), Person("Bar", 22), Person("Bar", 24)]
。(この時点での典型的な.intersection()
ものは私に何も与えません、これは元の集合和集合をオーバーライドするので、私はオーバーライドすることもクラス上で行うこともできません(__hash__
私__eq__
は思う)Person
Python 2.xでこれを行うための最良の方法は何ですか?
編集:ソリューションはに依存する必要がないことset
に注意してください。ただし、ユニオンを見つけてから交差点を見つける必要があるので、これはセットに適しているように感じます(ただし、問題が解決する限り、価値があると思われる魔法を使用するソリューションを受け入れます!)