临摹微笑
你可以做:>>> 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根据需要使用。都可以产生可哈希的不可变结果)