2014-05-10 9 views
12

नीचे दिए गए कोड में फ़ंक्शन U = set (p.enum()) में एक त्रुटि है जो असहनीय प्रकार की एक प्रकार त्रुटि है: 'सेट' वास्तव में यदि आप कक्षा विधि enum वापस देख रहे हैं ' एल 'जो सेट की सूची है और यू में फ़ंक्शन में एक सेट होना चाहिए, तो क्या आप इस मुद्दे को हल करने में मेरी मदद कर सकते हैं या मैं सेट्स सेट करने के लिए सेट की सूची कैसे परिवर्तित कर सकता हूं?टाइप त्रुटि Unhashable प्रकार: सेट

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 

उत्तर

13

अलग-अलग आइटम है कि आप एक सेट में डाल दिया, परिवर्तनशील नहीं किया जा सकता क्योंकि अगर वे बदल गया है, प्रभावी हैश शामिल किए जाने के नीचे टूट जाएगा के लिए जांच करने की क्षमता बदल सकते हैं और इस प्रकार होगा।

इसके बजाय, आपको अपरिवर्तनीय वस्तुओं को एक सेट में रखना होगा - उदा। frozenset एस।

आप करने के लिए अपने enum विधि से वापसी कथन को बदलते हैं ...

return [frozenset(i) for i in L] 

... तो यह काम करना चाहिए।

4

यह त्रुटि उठाई गई है क्योंकि एक सेट में केवल अपरिवर्तनीय प्रकार हो सकते हैं। या सेट mutable हैं। हालांकि 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})} 
संबंधित मुद्दे