我正在尝试编写一个应该比较列表结构的函数(值无关紧要)。问题是我有两个不相等的列表但函数仍返回True
,即使它实际上进入else
部分。我不明白为什么以及我做错了什么。这是我的代码:
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
所以问题只发生在第三个print(ListeIsomorf(ListeD,ListeG)) # False
上。它实际上会进入else
部分并打印"length from the list isn't equal"
,但它不会停止,也不会发出return(False)
。我错过了什么吗?
答案 0 :(得分:8)
问题是当你的函数递归调用时:
ListeIsomorf(i,j)
它会忽略返回的值。
因此,在第二级递归时发生的比较对顶级返回的内容没有影响。
将上述内容更改为:
if not ListeIsomorf(i,j):
return(False)
解决了这个问题。