删除包含 2 个相同元素的 Python 列表项
Removing Python List Items that Contain 2 of the Same Elements
我有一个列表 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
使用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')]
然后可以根据需要对结果进行排序。
获取 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)))
您可以使用它来维护 list
中 tuples
的顺序,并使用 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)]
如果你想保持元组的顺序,并且当有重复时总是保持第一个元组,你可以这样做:
>>> 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] ]
我有一个列表 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
使用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')]
然后可以根据需要对结果进行排序。
获取 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)))
您可以使用它来维护 list
中 tuples
的顺序,并使用 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)]
如果你想保持元组的顺序,并且当有重复时总是保持第一个元组,你可以这样做:
>>> 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] ]