以下列表具有一些重复的子列表,其子元素的顺序不同:
l1 = [ ['The', 'quick', 'brown', 'fox'], ['hi', 'there'], ['jumps', 'over', 'the', 'lazy', 'dog'], ['there', 'hi'], ['jumps', 'dog', 'over','lazy', 'the'], ]
如何删除重复项并保留看到的第一个实例,以获得:
l1 = [ ['The', 'quick', 'brown', 'fox'], ['hi', 'there'], ['jumps', 'over', 'the', 'lazy', 'dog'], ]
我尝试过了:
[list(i) for i in set(map(tuple, l1))]
但是,我不知道这是否是处理大型列表的最快方法,而且我的尝试没有按预期进行。关于如何有效删除它们的任何想法?
这个有点棘手。您想从冻结的计数器中删除字典,但是计数器在Python中不可哈希。为了使渐进复杂度稍有下降,可以使用已排序的元组代替冻结计数器:
seen = set() result = [] for x in l1: key = tuple(sorted(x)) if key not in seen: result.append(x) seen.add(key)
单线的相同想法如下所示:
[*{tuple(sorted(k)): k for k in reversed(l1)}.values()][::-1]