我有一个列表如下:
l = [['A', 'C', 'D'], ['B', 'E'], ['A', 'C', 'D'], ['A', 'C', 'D'], ['B', 'E'], ['F']]
结果应该是:
[['A', 'C', 'D'], ['B', 'E'], ['F']]
元素的顺序也不重要。
我试过:
print list(set(l))
numpy有没有更好的办法
最佳答案
列表不是“可散列”类型,不能是集合的成员。
卡住集可以,所以我们首先转换为那些(也使子列表顺序不敏感),然后再转换回列表。
print map(list, set(map(frozenset, l)))
或者如果你更喜欢理解,
print [list(x) for x in {frozenset(x) for x in l}]
我怀疑 numpy 是否提供任何“更好”(对于更好的定义)的方式。
这种方式是 IMO 最清晰和最 pythonic 的方式。
列表不能成为集合的一部分的原因是它们是可变的,因此现在的散列与更改后的散列不同;处于基于散列的集合中会导致混淆行为。
关于python - 从列表中删除重复的子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30837750/