当前位置: 首页 > 面试题库 >

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

谭景福
2023-03-14
问题内容

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

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

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

TypeError: unhashable type: 'list'

我正在使用的代码是

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

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

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 2.7 )的新数组中 以上返回: 问题答案: 您的变量的形状可能不正确: 如果使用这种方法读取列数据,就会发生以下情况: 也许你可以简单地使用 代替。 (PS您的代码看起来像它的犹豫不决它是否还是。我认为它只是一个错字。)

  • 问题内容: 我有这段代码: 当我运行该代码时,出现以下错误: TypeError:无法散列的类型:’dict’ 该错误的原因是什么,我该怎么解决? 问题答案: 从错误中,我推断这是一个字典(请参阅下面的repro)。字典不能被散列,因此不能用作另一个字典的键(或本身就是这个键!)。 您可能意思是或。如果这两种解决方案都不起作用,那么在有关什么类型和是什么以及它们包含什么的更多上下文中,我们将能够为

  • 问题内容: 我有这段代码: 当我运行该代码时,出现以下错误: TypeError:无法散列的类型:’dict’ 该错误的原因是什么,我该怎么办才能解决? 问题答案: 从错误中,我推断出它是字典(请参阅下面的repro)。字典不能被散列,因此不能用作另一个字典的键(或本身就是该键!)。 您可能意思是或。如果这两种解决方案都不起作用,则可以通过更多上下文了解什么是类型以及它们包含什么,我们将能够为您提

  • 我有一个模板结构。struct foo有嵌套类型。 我想使指针可哈希,这将适合

  • 问题内容: 将功能移植到程序的Python 3.1 fork时遇到一个奇怪的错误。我将其缩小为以下假设: 与Python 2.x相比,在Python 3.x中,如果对象具有方法,则该对象将自动取消哈希。 这是真的? 这是Python 3.1中发生的情况: 后续问题是,如何解决我的个人问题?我有一个对象,该对象存储一个指向多个对象的对象,并为每个对象提供过去某个特定时间点的酱菜堆的值。每当检入现有对

  • 我有一个的值为 我想返回 的数据帧 我最初试图将数据帧转换成数据集并映射数据集。但是,我无法用MurmurHash3重现散列。总之我是无法再现https://github . com/Apache/spark/blob/master/SQL/core/src/main/Scala/org/Apache/spark/SQL/functions . Scala # l 2165-l 2168。 对如何