python-3.x 类型错误无法哈希类型:set

jhkqcmku  于 2023-10-21  发布在  Python
关注(0)|答案(2)|浏览(130)

下面的代码在函数U=set(p.enum())中有一个错误,这是一个不可散列类型的类型错误:'set'实际上,如果你可以看到类方法枚举我返回'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
ibps3vxo

ibps3vxo1#

放入集合中的单个项不能是可变的,因为如果它们发生变化,有效散列将发生变化,因此检查包含性的能力将被破坏。
相反,你需要把不可变的对象放到一个集合中--例如。frozenset s.
如果将enum方法的return语句更改为.

return [frozenset(i) for i in L]

……那就能成功。

cgvd09ve

cgvd09ve2#

引发此错误的原因是集只能包含不可变类型。或者集合是可变的。frozenset类型:

In [4]: a, b = {1,2,3}, {2,3,4}

In [5]: set([a,b])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-6ca6d80d679c> in <module>()
----> 1 set([a,b])

TypeError: unhashable type: 'set'

In [6]: a, b = frozenset({1,2,3}), frozenset({2,3,4})

In [7]: set([a,b])
Out[7]: {frozenset({1, 2, 3}), frozenset({2, 3, 4})}

相关问题