如何在python中执行与自定义属性的交集
在上述情况下,如何在具有自定义字段id的列表之间自定义相交?set说明: 集合对象是不同的散列对象的无序集合 哈沙伯说: 如果一个对象的哈希值在其生存期内从未改变,则该对象是可哈希的。它需要一个_哈希_;方法,并且可以与它需要一个_eq _;方法的其他对象进行比较。比较相等的可散列对象必须具有相同的散列值 因此,您需要为您的类实现uuu散列和uuu eq如何在python中执行与自定义属性的交集,python,python-3.x,Python,Python 3.x,在上述情况下,如何在具有自定义字段id的列表之间自定义相交?set说明: 集合对象是不同的散列对象的无序集合 哈沙伯说: 如果一个对象的哈希值在其生存期内从未改变,则该对象是可哈希的。它需要一个_哈希_;方法,并且可以与它需要一个_eq _;方法的其他对象进行比较。比较相等的可散列对象必须具有相同的散列值 因此,您需要为您的类实现uuu散列和uuu eq class Random: def __init__(self,id): self.id=id sel
class Random:
def __init__(self,id):
self.id=id
self.prop=None
list_1={Random(12), Random(15), Random(22)}
list_2={Random(22),Random(9),Random(88)}
list_3={Random(88),Random(22),Random(12)}
result=list_1.intersection(list_2).intersection(list_3)
print (list(result))
#expected result = Random Object containing id=22
#returned result =[]
若您需要id,那个么您可以尝试新的of类方法,因为它返回一个值。
如果不返回,则得到一个完全不同的类的对象,这就是为什么结果为空的原因我可以控制返回哪个对象吗?从何处返回哪个对象?根据id比较左右,但只选择prop='red'所在的对象,而不选择另一个prop='green'所在的对象,您可以实现__eq__;以任何对代码有意义的方式。但如果只按id而不按道具进行比较,则表示具有相同id和不同道具的两个对象将被视为相等。如果这对你的情况有意义的话,没有什么能阻止你这么做。我想复制id,但由于它的交集,我只想返回包含prop=red的对象。如何以及在何处进行选择?还是我必须单独做
class Random:
def __init__(self,id):
self.id=id
self.prop=None
def __hash__(self):
return hash((self.id, self.prop))
def __eq__(self, other):
return self.id == other.id and self.prop == other.prop
class Random:
def __new__(cls, id):
return id
list_1 = {Random(12), Random(15), Random(22)}
list_2 = {Random(22), Random(9), Random(88)}
list_3 = {Random(88), Random(22), Random(12)}
result = list_1.intersection(list_2).intersection(list_3)
print(list(result))