python - 类型错误不可散列类型 :set

标签 python python-2.7 python-3.x set

下面的代码在函数 U=set(p.enum()) 中有一个错误,这是一个不可哈希类型的类型错误:'set' 实际上,如果你可以看到类方法 enum 返回'L',它是列表集合和函数中的 U 应该是集合,所以请您帮我解决问题或如何将集合列表转换为集合?

class pattern(object):

        def __init__(self,node,sets,cnt):
            self.node=node
            self.sets=sets
            self.cnt=cnt

        def enum(self):
            L=[]
            if self.cnt==1:
                L = self.node
            else:
                for i in self.sets:
                    L=[]
                    for j in self.node:
                        if i!=j:
                            L.append(set([i])|set([j]))

            return L #List of sets              

    V=set([1,2,3,4])
    U=set()
    cnt=1
    for j in V:
        p=pattern(V,(U|set([j])),cnt)
        U=set(p.enum()) #type error Unhashable type:'set'   
        print U
            cnt+=1 

最佳答案

您放入集合中的单个项目不能是可变的,因为如果它们发生变化,有效的哈希值就会发生变化,因此检查是否包含的能力就会失效。

相反,您需要将不可变对象(immutable对象)放入一个集合中 - 例如frozensets.

如果您将 enum 方法中的 return 语句更改为...

return [frozenset(i) for i in L]

...那么它应该可以工作。

关于python - 类型错误不可散列类型 :set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23577724/

相关文章:

python - 使用大量内存的简单 Python 脚本

python - 我的标签是否过载,或者这是将构造函数添加到 yaml 配置或其他内容的范围问题

python - 递归逆 FFT

python-3.x - 将 aiohttp 请求与其响应相关联

python - 错误 : unpack_from requires a buffer

python jenkins.jenkins模块: how to login to jenkins with third party sso

string - Python连接一个字符串和一个变量

python - 嵌套默认字典

python-3.x - 没有名为 'pandas' 的模块 - Jupyter、Python3 内核、TensorFlow 通过 Docker

json - 无法将字典序列化为 JSON