下面的代码在函数 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对象)放入一个集合中 - 例如frozenset
s.
如果您将 enum
方法中的 return 语句更改为...
return [frozenset(i) for i in L]
...那么它应该可以工作。
关于python - 类型错误不可散列类型 :set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23577724/