Python:从嵌套列表中删除重复项

7
mylist = [[1,2],[4,5],[3,4],[4,3],[2,1],[1,2]]

我想要删除重复项,重复项可以是相反的。结果应该是:

mylist = [[1,2],[4,5],[3,4]]

我该如何在Python中实现这个功能?


顺序重要吗? - Volatility
1
-1:避免使用内置函数作为变量名 - Abhijit
@Volatility,没有顺序不重要。 - Sanjivani
@abhijit,这只是一个例子,不是真正的代码。 - Sanjivani
1
即便如此,您也不应该将“list”用作变量名。 - Volatility
3个回答

13
lst=[[1,2],[4,5],[3,4],[4,3],[2,1],[1,2]]
fset = set(frozenset(x) for x in lst)
lst = [list(x) for x in fset]

这种方法无法保留原始列表的顺序,也不能保留子列表的顺序。
>>> lst=[[1,2],[4,5],[3,4],[4,3],[2,1],[1,2]]
>>> fset = set(frozenset(x) for x in lst)
>>> lst = [list(x) for x in fset]
>>> lst
[[1, 2], [3, 4], [4, 5]]

不完全正确,假设您的lst中有[0,0],它将被压缩为[0] - Oleg
没错。如果您保证输入始终只有2个项目,并且要在输出中保留它,那么将1元素列表转换为2元素列表的后处理过程非常容易 :) - mgilson

2
如果顺序很重要,你可以始终使用OrderedDict。
>>> unq_lst = OrderedDict()
>>> for e in lst:
    unq_lst.setdefault(frozenset(e),[]).append(e)


>>> map(list, unq_lst.keys())
[[1, 2], [4, 5], [3, 4]]

0
如果顺序不重要:
def rem_dup(l: List[List[Any]]) -> List[List[Any]]:
    tuples = map(lambda t: tuple(sorted(t)), l)
    return [list(t) for t in set(tuples)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接