我有一个列表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
答案 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] ]