Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中执行与自定义属性的交集_Python_Python 3.x - Fatal编程技术网

如何在python中执行与自定义属性的交集

如何在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

在上述情况下,如何在具有自定义字段id的列表之间自定义相交?

set说明:

集合对象是不同的散列对象的无序集合

哈沙伯说:

如果一个对象的哈希值在其生存期内从未改变,则该对象是可哈希的。它需要一个_哈希_;方法,并且可以与它需要一个_eq _;方法的其他对象进行比较。比较相等的可散列对象必须具有相同的散列值

因此,您需要为您的类实现uuu散列和uuu eq

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))