Le code ci-dessous a une erreur dans la fonction U = set (p.enum ()) qui est une erreur de type de type non partageable: 'set' en fait si vous pouvez voir la méthode de classe enum am renvoyant 'L' qui est la liste des ensembles et le U dans la fonction doit être un ensemble, pouvez-vous m'aider à résoudre le problème ou Comment puis-je convertir une liste d'ensembles en ensemble d'ensembles?
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
Les éléments individuels que vous placez dans un ensemble ne peuvent pas être modifiés, car s'ils changeaient, le hachage effectif changerait et donc la capacité de vérifier l'inclusion tomberait en panne.
Au lieu de cela, vous devez mettre des objets immuables dans un ensemble - par exemple frozenset
s.
Si vous changez l'instruction return de votre méthode enum
en ...
return [frozenset(i) for i in L]
... alors ça devrait marcher.
Cette erreur est générée car un ensemble ne peut contenir que des types immuables. Ou les ensembles sont mutables. Cependant, il existe le type 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})}