我有一个特定类的实例列表。该列表包含“重复项”,即重复项共享完全相同的属性。我想从此列表中删除重复项。
我可以通过使用检查两个实例是否共享相同的属性
class MyClass:
def __eq__(self, other) :
return self.__dict__ == other.__dict__
我当然可以遍历整个实例列表并逐个元素地比较它们以删除重复项,但我想知道是否有更 pythonic 的方法来执行此操作,最好使用 in 运算符 + 列表理解。
请您参考如下方法:
sets(无顺序)
集合不能包含重复的元素。 list(set(content)) 将对列表进行去重。这不是太低效,可能是更好的方法之一:P 你需要为你的类定义一个 __hash__ 函数,对于相等的元素必须相同,对于不相等的元素必须不同这个工作的元素。请注意,hash 值必须遵守上述规则,否则它可能会在运行之间发生变化而不会导致问题。
index函数(稳定顺序)
您可以执行 lambda l: [l[index] for index in range(len(l)) if index == l.index(l[index])]。这只会保留列表中第一个元素。
in 运算符(稳定顺序)
def uniquify(content):
result = []
for element in content:
if element not in result:
result.append(element)
return result
这将继续向输出列表追加元素,除非它们已经在输出列表中。
