Python:删除列表忽略列表顺序中的重复项

car*_*arl 2 python

我有一个这样的列表列表

[[], [1, 2, 2], [1], [2], [2], [1, 2], [1, 2], [2, 1], [2, 2]]
Run Code Online (Sandbox Code Playgroud)

我想删除所有重复,这里的顺序并不重要,所以在上面的列表中我需要删除[2],[1,2][2,1].我以为我可以这样做Counter()

from collections import Counter
counter_list = []
no_dublicates = []
for sub_list in all_subsets:
    counter_dic = Counter(sub_list)
    if counter_dic in counter_list:
        pass
    else:
        no_dublicates.append(list(sub_list))
        counter_list.append(counter_dic)
Run Code Online (Sandbox Code Playgroud)

哪个工作正常...但它是我的代码中最慢的部分.我想知道是否有更快的方法来做到这一点?

Ry-*_*Ry- 5

您可以将Counter对象转换为frozensets,这些对象是可以清除的,并且可以放在一个集合中,以便在in检查中进行线性节省:

from collections import Counter

counters = set()
no_duplicates = []

for sub_list in all_subsets:
    c = frozenset(Counter(sub_list).items())

    if c not in counters:
        counters.add(c)
        no_duplicates.append(list(sub_list))
Run Code Online (Sandbox Code Playgroud)

用dict理解做这件事看起来也很酷:

no_duplicates = list(
    {frozenset(Counter(l).items()): l for l in all_subsets}.values())
Run Code Online (Sandbox Code Playgroud)