2017-10-14 9 views
0

Veuillez jeter un coup d'œil à ce programme.Python append remplace la liste existante par None

La fonction d'ajout remplace la liste par None. L'erreur est joint ci-dessous

class Solution(object): 
    def isIsomorphic(self, a, b): 

     ad = {} 
     bd = {} 
     if len(a) != len(b): 
      return False 
     for i in range(len(a)): 
      if a[i] in ad: 
       ad[a[i]] = ad[a[i]].append(i) 
      else: 
       ad[a[i]] = [i] 

      if b[i] in bd: 
       bd[b[i]] = bd[b[i]].append(i)   
      else: 
       bd[b[i]] = [i] 
     ret = True 
     for j,k in zip(ad.values(), bd.values()): 
      if j != k: 
       return False 
     return ret 


sol = Solution() 
print sol.isIsomorphic("ccc", "aab") 
erreur
 ad[a[i]] = ad[a[i]].append(i) 

AttributeError: 'NoneType' object has no attribute 'append'  

Répondre

0

Voilà, vous étiez en train d'assigner ad [a [i]]. Append [i] à ad [a [i]] qui n'était pas nécessaire. C'est appel de fonction et renvoie None. Vous avez juste besoin de faire annonce [a [i]]. Append (i)

class Solution(object): 
def isIsomorphic(self, a, b): 

    ad = {} 
    bd = {} 
    if len(a) != len(b): 
     return False 
    for i in range(len(a)): 
     if a[i] in ad: 
      ad[a[i]].append(i) 
     else: 
      ad[a[i]] = [i] 


     if b[i] in bd: 
      bd[b[i]].append(i)   
     else: 
      bd[b[i]] = [i] 
    ret = True 
    for j,k in zip(ad.values(), bd.values()): 
     if j != k: 
      return False 
    return ret 

sol = Solution() impression sol.isIsomorphic ("ccc", "AAB")

1

append ajoute la valeur à la liste en place et retourne None. Donc ad[a[i]] = ad[a[i]].append(i) signifie que vous remplacez ad[a[i]] par None.

Here est la partie de la documentation qui indique qu'il

Vous avez sans doute remarqué que les méthodes telles que l'insertion, supprimer ou tri qui ne modifient que la liste n'a pas de valeur de retour imprimé - ils renvoient le Aucun défaut . [1] Ceci est un principe de conception pour toutes les structures mutables de données en Python.