python set中的对象如何去重

定义Person对象
class Person():

def __init__(self,name,number):
    self.name=name
    self.number=number
   

person1=Person('yms',('123456','123'))
person2=Person('yms',('123456','123'))
将两个对象都放到set里面
set([person1,person2])
我得出的结果set里面含有2个对象,但是明显这俩个对象一样的,请问怎么去重呢?注意一下('123456','123')是个元组不是普通字符串

阅读 6.7k
2 个回答

你需要为这个类定义__eq____ne____hash__这三个函数,缺一不可:

class Person(object):
    def __init__(self, name, number):
        self.name = name
        self.number = number
        
    def __eq__(self, other):
        if isinstance(other, Person):
            return ((self.name == other.name) and (self.number == other.number))
        else:
            return False
            
    def __ne__(self, other):
        return (not self.__eq__(other))
        
    def __hash__(self):
        return hash(self.name) + hash(self.number)
        
p1 = Person('yms', ('123456','123'))
p2 = Person('yms', ('123456','123'))
print(set([p1, p2]))

由于你说number是元组,所以我就直接对其使用hash函数了。这个hash函数是随便写的,你自己根据实际情况调整。

看到这里你应该就懂了

class Person:
    def __init__(self,name,number):
        self.name=name
        self.number=number

person1=Person('yms',('123456','123'))
person2=Person('yms',('123456','123'))

a = '1'
b = '1'
print id(a), id(b)
print id(person1), id(person2)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题