我正在处理一个看起来像这样的嵌套列表。
mylist =[
["First", "Second", "Third"],
["First", "Second", "Third"],
...
]
目标是根据以下定义删除mylist的重复元素:如果element1[0] == element2[0]
和element1[1] == element2[1]
,则元素等于另一个元素。基本上,只有前两个元素计数,忽略其余元素。
这看起来并不十分困难,但我可能过于复杂并且遇到麻烦。我认为我接近一个解决方案,如果它完成并且没人接听,我会发布。
我的主要问题:
我真的希望我可以将列表转换为更常规情况下的集合 - 是否有任何方法可以设置等效的自定义定义?许多内置方法因此无法工作,并且重写它们有点痛苦,因为索引总是被搞砸了。
答案 0 :(得分:3)
您可以创建一个存储数据的类并覆盖__eq__
:
class MyListThingy(object):
def __init__(self, data):
self.data = data
def __eq__(self, other):
return self.data[0]==other.data[0] and self.data[1]==other.data[1]
当然,这对使用散列的集合没有任何好处。为此,你必须覆盖__hash__
:
def __hash__(self):
return hash((self.data[0],self.data[1]))
答案 1 :(得分:1)
您可以从内部列表创建第一项和第二项的元组,以用作字典中的键。然后将所有内部列表添加到字典中,这将导致删除重复项。
d = dict()
l =[["First", "Second", "Third"], ["First", "Second", "Fourth"]]
for item in l:
d[(item[0], item[1])]=item
输出:(d.values())
[['First', 'Second', 'Fourth']]