목록 구조를 비교하는 함수를 작성하려고합니다 (값은 무관합니다). 문제는 내가 부동 한 두 목록을 가지고 있지만 실제로는 else
부분으로 들어가더라도 함수는 여전히 True
을 반환합니다. 나는 왜, 그리고 내가 뭘 잘못했는지 이해하지 못합니다.함수가 "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
그래서 문제는 세 번째 print(ListeIsomorf(ListeD,ListeG)) # False
발생 : 여기 내 코드입니다. 실제로는 else
부분으로 들어가서 "length from the list isn't equal"
을 인쇄하지만 멈추지 않고 return(False)
을 제공하지 않습니다. 내가 놓친 게 있니?
ListeIsomorf(i,j)
가 반환 된 값을 무시 :
Welcome to Stackoverflow! 들여 쓰기를 수정하십시오 (나는'else' 블록이 들여 쓰기되어 있다고 가정합니다) –
+1, 들여 쓰기를 수정하기 위해 [편집] 링크를 사용하십시오. –
'isinstance (p, list)'를 사용하십시오. - 많은 점에서 더 낫습니다. –