我要解决的问题是使用递归在更大的列表中为双对创建最大值列表。例如,假设输入为[[2,4],[6,7],[9,9],[2,1]],我需要找到每个对的最大值,因此所需的输出为[4 ,7,9,2]。我目前有
def twoMax(xlst):
def mymax(x,y):
if x > y:
return x
else:
return y
return_lst = []
if xlst == []:
return []
else:
for i in xlst:
return_lst.append(mymax(i[0],i[1]))
return twoMax(xlst[1:])
return return_list
函数mymax仅用于更轻松地找到最大值。
我试图做的是创建一个return_list,在递归过程中,它将maxes添加到列表中。据我了解,通过递归在每个堆栈中都创建了一个单独的return_list
。
编辑:当前代码的问题是它返回一个空列表。 EDIT2:在示例中,我想输入最大字符而不是最小字符
答案 0 :(得分:2)
您正在混合递归和迭代。
return twoMax(xlst[1:])
是多余的,因为它将始终被执行,并将当前列表的尾部作为参数传递,这将导致一次又一次调用twoMax直到xlst为空,并返回[]。
删除此行,您的代码即可使用。
我认为这是一个家庭作业问题(因为它是一个过度设计的功能),所以您现在拥有的是一个迭代算法。要创建递归算法,您需要做一些不同的事情:
def twoMax(xlst, return_lst=[]):
def mymax(x,y):
if x > y:
return x
else:
return y
if xlst == []:
return return_lst
else:
first_item = xlst[0]
return_lst.append(mymax(first_item[0],first_item[1]))
return twoMax(xlst[1:], return_lst)
此算法将xlst的first_item的最大值添加到return_lst(最初为空的列表)中,然后在xlst的尾部再次调用twoMax,直到xlst为空,然后返回return_lst。
答案 1 :(得分:1)
def twoMax(xlst):
if xlst == []:
return []
else:
return [ max(xlst[0]) ] + twoMax(xlst[1:])