web-dev-qa-db-fra.com

Erreur de type Type non lavable: définir

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 
21
user2014111

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 frozensets.

Si vous changez l'instruction return de votre méthode enum en ...

return [frozenset(i) for i in L]

... alors ça devrait marcher.

27
Amber

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})}
6
Kiwi