在列表中成对查找最大值

时间:2019-10-28 14:16:56

标签: python function recursion

我要解决的问题是使用递归在更大的列表中为双对创建最大值列表。例如,假设输入为[[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:在示例中,我想输入最大字符而不是最小字符

2 个答案:

答案 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:])