Tho*_*hel 5 python list duplicates
我在解析树时构建了大量高级对象。但是,在执行此步骤之后,我必须从列表中删除重复项,并且我发现此新步骤在Python 2中非常慢(可以接受,但在Python 3中仍然有些慢)。但是我知道,不同的对象实际上具有不同的id。出于这个原因,我得到了一个多通过以下步骤更快的代码:
key=id选项对列表进行排序;因此,我有一个可以正常运行的代码,但是我想知道是否可以在Python中更直接地完成此任务。
例。让我们构建两个具有相同值但具有不同id的相同对象(例如fractions.Fraction,为了依赖标准库,我将采用a ):
from fractions import Fraction
a = Fraction(1,3)
b = Fraction(1,3)
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试使用pythonical实现我想做的事情,则会list(set(...))得到错误的结果,因为{a,b}仅保留两个值(相同但具有不同的id)之一。
我现在的问题是:通过id而不是按值删除重复项的最有效,最可靠,最快捷的方法是什么?列表的顺序与是否必须更改无关紧要。
您应该重写该__eq__方法,以便它依赖于对象id而不是其值。但请注意,您的对象也必须是可散列的,因此您__hash__也应该定义一个正确的方法。
class My_obj:
def __init__(self, val):
self.val = val
def __hash__(self):
return hash(self.val)
def __eq__(self, arg):
return id(self) == id(arg)
def __repr__(self):
return str(self.val)
Run Code Online (Sandbox Code Playgroud)
演示:
a = My_obj(5)
b = My_obj(5)
print({a, b})
{5, 5}
Run Code Online (Sandbox Code Playgroud)