Python 如果某些重复项的顺序不同,则从列表列表中删除重复项

Python 如果某些重复项的顺序不同,则从列表列表中删除重复项,python,list,duplicates,Python,List,Duplicates,我的问题与下面链接的问题非常相似,只是如果有[2,1]元素,我也需要将其删除 我试过各种各样的方法,但就是不能成功。任何帮助都将不胜感激 谢谢 这是可行的,但它不保留子列表的顺序: def bygroup(k): k = sorted(sorted(x) for x in k) return [k for k,_ in itertools.groupby(k)] >>> k = [[1, 2], [4], [5, 6, 2], [1, 2], [3], [4

我的问题与下面链接的问题非常相似,只是如果有[2,1]元素,我也需要将其删除

我试过各种各样的方法,但就是不能成功。任何帮助都将不胜感激


谢谢

这是可行的,但它不保留子列表的顺序:

def bygroup(k):
    k = sorted(sorted(x) for x in k)
    return [k for k,_ in itertools.groupby(k)]

>>> k = [[1, 2], [4], [5, 6, 2], [1, 2], [3], [4], [2, 1]]

>>> bygroup(k)
[[1, 2], [2, 5, 6], [3], [4]]
在Python 2.7或3.2中,如果需要保留子列表中的顺序以及列表的一般顺序(重复项除外),可以使用OrderedDict,但速度要慢得多:

def bydict(k):
    s = collections.OrderedDict()
    for i in k:
        s[tuple(sorted(i))] = i
    return s.values()

>>> bydict(k)
[[2, 1], [4], [5, 6, 2], [3]]

我使用timeit进行了100000次迭代测试。在Python2.7.2中,bydict函数花费的时间大约是Python2.7.2的4倍,在Python3.2中花费的时间大约是Python3.2的3倍。

也许您真正想要的是一个
集合的

编辑:嗯,但那不行。唉,集合不能包含集合,因为集合是不可损坏的<代码>冻结集
是:

unique = set(map(frozenset, list_of_lists))

难道你不能对所有的子列表进行排序,然后应用你链接到的解决方案吗!不知道为什么我没有想到。哦,我记得为什么我没有想到,我需要子列表保持有序!谢谢,但遗憾的是,我需要保留子列表的顺序。正如Tim Pietzcker当时建议的那样,我在创建每个子列表时对其进行排序,然后使用我链接到的问题中讨论的最快方法。你知道你的方法会比这更快吗?(当我有时间时,我可以自己检查一下)。
unique = set(map(frozenset, list_of_lists))