我需要使用递归方式在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()
。如何修复这个问题以处理嵌套列表?
l0,l1 = s_smallest(L[0]); m0,m1=s_smallest(L[1:]);
然后合并 l0,l1,m0,m1。 - aghastlen(L)==2
时可能仍然涉及到一个或两个列表。你可能应该一直递归下去,并处理长度为1的情况下的None
或其他内容。 - aghast