返回嵌套表第二小的数字我已经在使用递归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 –