python - 从列表中删除重复的子列表

标签 python numpy

我有一个列表如下:

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/

相关文章:

numpy - 即使安装了 Chapel,Pip Install Arkouda 也会失败

python - 如何有效地从 numpy 数组中提取由索引给出的元素列表?

python - 如何定位NetworkX中巨型组件的中心节点?

python - 为什么在不指定关键字start时枚举执行速度较慢?

python - 以完全错误的顺序打印代码

python - 检查解释器是否嵌入

python - 在字典中临时保留键和值

numpy - 用 nans 计数的 Pandas 聚合

python - Numba 比 numpy 慢 3 倍

python - 一行 for 循环将元素添加到 Python 中的列表