gpt4 book ai didi

class - 如何从 Python 2.7 中的 set() 中删除重复的类对象?

转载 作者:行者123 更新时间:2023-12-02 17:41:12 25 4
gpt4 key购买 nike

让我们定义一个简单的类:

class sample(object):
def __init__(self, key):
self.key = key

假设 a1、a2、a3、a4、a5 是“sample”类的对象(a1 和 a5 共享相同的“key”元素):

a1 = sample('test1')
a2 = sample('test2')
a3 = sample('test3')
a4 = sample('test4')
a5 = sample('test1')

现在,如果我将这些元素添加到列表中,结果将是:

 [<__main__.sample at 0x1189c1e90>,
<__main__.sample at 0x1189c1b90>,
<__main__.sample at 0x1189c15d0>,
<__main__.sample at 0x1189c1dd0>,
<__main__.sample at 0x1189c16d0>]

但是如果我将这个列表转换为“set”对象(删除 a1/a5),结果将是:

 {<__main__.sample at 0x1189c15d0>,
<__main__.sample at 0x1189c16d0>,
<__main__.sample at 0x1189c1b90>,
<__main__.sample at 0x1189c1dd0>,
<__main__.sample at 0x1189c1e90>}

所以,问题是:我如何修改类,以便它可以设置两个共享相同“键”的对象作为同一个对象(所以我在 set() 中没有重复项)?我正在寻找一个非常简单的实现:)

最佳答案

您必须实现自己的 __hash____eq__ 方法以确保在构造集合时它们被视为相等:

class Sample(object):
def __init__(self, key):
self.key = key

def __hash__(self):
return hash(self.key)

def __eq__(self, other):
return self.key == other.key

关于class - 如何从 Python 2.7 中的 set() 中删除重复的类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20435856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com