1 回答
TA贡献1982条经验 获得超2个赞
你可以做:
>>> 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根据需要使用。都可以产生可哈希的不可变结果)
添加回答
举报