下面的代码在函数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
2条答案
按热度按时间ibps3vxo1#
放入集合中的单个项不能是可变的,因为如果它们发生变化,有效散列将发生变化,因此检查包含性的能力将被破坏。
相反,你需要把不可变的对象放到一个集合中--例如。
frozenset
s.如果将
enum
方法的return语句更改为.……那就能成功。
cgvd09ve2#
引发此错误的原因是集只能包含不可变类型。或者集合是可变的。
frozenset
类型: