<p>感谢@criket\u 007给了我正确的提示。Python太容易了!只需为<em>complexe数据对象</em>创建操作符。然后你可以把它们当作<code>set</code>。你知道吗</p>
<p>这就是最新的例子</p>
<pre><code>#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# the "complex data"
class Person:
def __init__(self, name):
# assume the 'name' as unique
self.name = name
def __str__(self):
return self.name
def __repr__(self):
return '{}:{}'.format(id(self), self.__str__())
def __hash__(self):
return hash(self.name)
# create example data
mylistA = [Person('Anna'),
Person('Bob'),
Person('Jane'),
Person('Alfred')]
sa = set(mylistA)
mylistB = [Person('Simon'),
Person('Anna'),
Person('Doris'),
Person('Bob')]
sb = set(mylistB)
mylistC = [Person('Bob'),
Person('Rosi'),
Person('Becky'),
Person('Anna')]
sc = set(mylistC)
mylistD = [Person('Alfred'),
Person('Bob'),
Person('Chris'),
Person('Susi')]
sd = set(mylistD)
# should result in 'Anna', 'Bob'
resultAND = sa.intersection(sb, sc)
print('AND: {}\n'.format(resultAND))
# should result in 'Anna', 'Bob', 'Jane', 'Alfred', 'Simon', 'Doris', 'Rosi',
# 'Becky'
resultOR = sa.union(sb, sc)
print('OR: {}\n'.format(resultOR))
# 'Anna'
resultNOT = resultAND.difference(sd)
print('NOT: {}\n'.format(resultNOT))
</code></pre>