Тип ошибки Тип расщепления: установлен
В приведенном ниже коде есть ошибка в функции U = set (p.enum()), которая представляет собой ошибку типа unhashable type: "set" на самом деле, если вы можете увидеть метод класса enum am return "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
Ответы
Ответ 1
Отдельные элементы, которые вы помещаете в набор, не могут быть изменчивыми, потому что, если они будут изменены, эффективный хеш изменится, и, следовательно, возможность проверки на включение сломается.
Вместо этого вам нужно поместить неизменяемые объекты в набор - например, frozenset
с.
Если вы измените оператор return из вашего метода enum
на...
return [frozenset(i) for i in L]
... тогда он должен работать.
Ответ 2
Эта ошибка возникает из-за того, что набор может содержать только неизменяемые типы. Или наборы изменяемы. Однако существует тип 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})}