猿问

从列表中删除重复列表

首先,我要承认已经问过这个问题,但是答案似乎过时或不令人满意。这个问题给出了一个未排序列表,如何才能以最有效,最优雅的方式删除重复项?(即使用最短的语法与最快的计算时间)

例子:

鉴于[[1,2,3],[],[2,-2],[3,2,1]],我们要[[1,2,3],[],[2,-2]]。请注意,是否[1,2,3]还是[3,2,1]无所谓。


四季花海
浏览 175回答 1
1回答

临摹微笑

你可以做:>>> li=[[1,2,3],[],[2,-2],[3,2,1]]>>> {frozenset(e) for e in li}{frozenset({1, 2, 3}), frozenset({2, -2}), frozenset()}>>> [list(x) for x in {frozenset(e) for e in li}][[1, 2, 3], [2, -2], []]关键是要使用,frozenset因为集合不可散列。请注意,此方法可能会更改顺序。如果要保持相同的顺序,可以执行以下操作:>>> seen=set()>>> [e for e in li if frozenset(e) not in seen and not seen.add(frozenset(e))][[1, 2, 3], [], [2, -2]]如果有重复的元素的可能性内的子列表,你可以在子列表排序,使用的是一个表示:li=[[1,2,3],[],[2,-2],[3,2,1],[1,1,2,2,3],[1,2,1,2,3]]seen=set()nli=[]for e in li:    re=repr(sorted(e))    if re not in seen:        seen.add(re)        nli.append(e)>>> nli[[1, 2, 3], [], [2, -2], [1, 1, 2, 2, 3]](注意:可以tuple代替使用,也可以repr根据需要使用。都可以产生可哈希的不可变结果)
随时随地看视频慕课网APP

相关分类

Python
我要回答