删除包含2个相同元素的Python列表项

时间:2015-08-08 01:13:57

标签: python list duplicate-removal

我有一个列表myList,其中包含表单

的项目
myList = [('a','b',3), ('b','a',3), ('c','d',1), ('d','c',1), ('e','f',4)]

第一个和第二个项目是相同的,第三个和第四个是相同的,尽管他们的第一个和第二个元素是交换的。我想只保留其中一个,以便最终列表如下所示:

A,B,3

C,d,1

E,F,4

4 个答案:

答案 0 :(得分:4)

使用sets和frozensets删除相同的元素:

>>> mySet = [frozenset(x) for x in myList]
>>> [tuple(x) for x in set(mySet)]
[('a', 3, 'b'), (4, 'e', 'f'), (1, 'c', 'd')]

然后可以按照您的喜好对结果进行排序。

答案 1 :(得分:2)

获取myList中的每个元组,将其转换为列表并应用sorted()。这导致列表中填充了排序的内部列表,看起来像。

myList = [('a','b',3), ('b','a',3), ('c','d',1), ('d','c',1), ('e','f',4)]
sorted_inner_list = [sorted(list(element)) for element in myList]
output = list(set(map(tuple,sorted_inner_list)))

答案 2 :(得分:1)

您可以使用它来维护tuples list内的set的顺序,并使用>>> myList = [('a','b',3), ('b','a',3), ('c','d',1), ('d','c',1), ('e','f',4)] >>> _ = lambda item: ([str,int].index(type(item)), item) >>> sorted(set([tuple(sorted(i, key = _)) for i in myList]), key=lambda x: x[0])

消除重复项
[('a', 'b', 3), ('c', 'd', 1), ('e', 'f', 4)]

输出:

NetworkItem

答案 3 :(得分:1)

如果你想保持元组的顺序,并且在重复时总是保留第一个元组,你可以这样做:

>>> sets = [ frozenset(x) for x in myList ]
>>> filtered = [ myList[i] for i in range(len(myList)) if set(myList[i]) not in sets[:i] ]
>>> filtered
[('a', 'b', 3), ('c', 'd', 1), ('e', 'f', 4)]

如果您不想使用其他变量:

filtered = [ myList[i] for i in range(len(myList))
            if set(myList[i]) not in [ frozenset(x) for x in myList ][:i] ]