python set中的对象如何去重

查看:129
本文介绍了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')是个元组不是普通字符串

解决方案

你需要为这个类定义__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函数是随便写的,你自己根据实际情况调整。

这篇关于python set中的对象如何去重的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆