返回嵌套表第二小的數字我已經在使用遞歸Python列表返回第二小號碼,沒有循環。我所做的是創建一個幫助器函數,它返回列表中(最小,次小)值的元組,然後我只需在我的second_smallest
函數中使用tuple[1]
。使用遞歸
def s_smallest(L):
if(len(L) == 2):
if (L[0] >= L[1]):
return (L[1],L[0])
else:
return (L[0],L[1])
else:
first_smallest,second_smallest = s_smallest(L[1:])
if L[0] >= first_smallest and L[0] <= second_smallest:
return (first_smallest, L[0])
elif L[0] <= first_smallest:
return (L[0], first_smallest)
else:
return (first_smallest, second_smallest)
這工作,但現在我需要處理嵌套列表,所以s_smallest([1,2,[3,0]])
應該返回(0,1)
。我試着這樣做:
if isinstance(L[0],list):
first_smallest,second_smallest = s_smallest(L[0])
else:
first_smallest,second_smallest = s_smallest(L[1:])
拿到第一最小和第二小值,如果它是一個列表,但我得到一個錯誤說builtins.TypeError: unorderable types: int() >= list()
。我如何解決這個問題來處理嵌套列表?
的你的錯誤的明顯來源是你沒有完成整合代碼。如果L [0]是一個列表,那麼你必須對它進行遞歸,然後繼續用L [1]處理。您不能再使用L [0],因爲它是一個列表,而不是一個整數*。不過,你正走在正確的軌道上。嘗試像'l0,l1 = s_smallest(L [0]); m0,m1 = s_smallest(L [1:]);'然後合併l0,l1,m0,m1 –
另外,要小心可能性(如你的例子),當len(L)== 2'成爲一個或兩個涉及的名單。你可能應該一路下調,並處理'無'或什麼的len = 1 case –