TypeError:不可散列的类型:使用内置set函数时的“ list”

发布于 2021-01-29 19:25:42

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

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

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

TypeError: unhashable type: 'list'

我正在使用的代码是

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

TopP是一个列表,就像上面的eg一样

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

关注者
0
被浏览
76
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    集要求其项是可 哈希的
    。在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)))
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看