J'essaye d'écrire une fonction qui est supposée comparer des structures de liste (les valeurs sont indifférentes). Le problème est que j'ai deux listes qui sont inégales mais la fonction renvoie toujours True
même si elle va effectivement dans la partie else
. Je ne comprends pas pourquoi et ce que j'ai fait de mal. Voici mon code:La fonction ne s'arrête pas après "return (False)"
def islist(p): #is p a list
return type(p)==type(list())
def ListeIsomorf(a,b):
if len(a)==len(b):
for i,j in zip(a,b):
if islist(i) and islist(j):
ListeIsomorf(i,j)
elif islist(i) or islist(j):
return(False)
return(True)
else:
print(a,"length from the list isn't equal",b)
return(False)
#example lists
ListeE = [[],[],[[]]]
ListeD = [[],[],[[]]]
ListeF = [[[],[],[[]]]]
ListeG = [[],[[]],[[]]]
ListeH = [1,[3]]
ListeI = [1,3]
#tests
print(ListeIsomorf(ListeD,ListeE)) # True
print(ListeIsomorf(ListeD,ListeF)) # False
print(ListeIsomorf(ListeD,ListeG)) # False
print(ListeIsomorf(ListeH,ListeI)) # False
Le problème se produit uniquement avec le troisième print(ListeIsomorf(ListeD,ListeG)) # False
. Il va en fait dans la partie else
et imprime le "length from the list isn't equal"
mais il ne s'arrête pas et il ne donne pas le return(False)
. Est-ce que je manque quelque chose?
Bienvenue dans Stackoverflow! Veuillez corriger votre indentation (je suppose que le bloc 'else' est en retrait) –
+1, veuillez utiliser le lien [modifier] pour corriger l'indentation. –
Veuillez utiliser 'isinstance (p, list)' - il vaut mieux sur tellement de termes :) –