python - 类型错误 : unhashable type: 'list' when using built-in set function

标签 python list duplicates

我有一个包含多个列表作为其元素的列表

eg: [[1,2,3,4],[4,5,6,7]]

如果我使用内置的 set 函数从这个列表中删除重复项,我会收到错误

TypeError: unhashable type: 'list'

我使用的代码是

TopP = sorted(set(TopP),reverse=True)

TopP 是一个列表,就像在例如以上

set() 的这种用法是错误的吗?还有其他方法可以对上述列表进行排序吗?

最佳答案

集合要求它们的项目是可散列的。在 Python 预定义的类型中,只有不可变的类型(例如字符串、数字和元组)是可散列的。可变类型(例如列表和字典)不可散列,因为更改其内容会更改散列并破坏查找代码。

因为您无论如何都要对列表进行排序,所以只需将重复删除放置在列表已排序的之后。这很容易实现,不会增加操作的算法复杂度,并且不需要将子列表更改为元组:

def uniq(lst):
    last = object()
    for item in lst:
        if item == last:
            continue
        yield item
        last = item

def sort_and_deduplicate(l):
    return list(uniq(sorted(l, reverse=True)))

关于python - 类型错误 : unhashable type: 'list' when using built-in set function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13464152/

相关文章:

python - pandas 应用参数没有 lambda 的函数

python - python逐行比较文件

list - Haskell 列表中元素的索引

mysql - 列表和 Linq To Sql 性能问题

MySQL - 如何获得重复的相邻字段的总和

python - numpy 独特的奇怪行为

python - 遇到 Unresolved 自定义操作 : TensorListFromTensor. 节点号 4 (TensorListFromTensor) 准备失败

pyspark - 如何在pyspark数据框中查找重复的列值

python - python模块中的奇怪字符

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