繁体   English   中英

在列表中查找最大值

[英]Finding max out of pairs in a list

我必须解决的问题是使用递归为更大的列表中的对创建一个最大值列表。 例如,假设输入是 [ [2,4], [6,7], [9,9], [2,1] ] 我需要找到每个单独对的最大值,因此所需的 output 是 [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

function mymax 只是用来更容易找到最大值。 我试图做的是创建一个 return_list ,当它通过递归时,它会将最大值添加到列表中。 据我了解,在通过递归的每个堆栈中,都会创建一个单独的return_list

编辑:当前代码的问题是它返回一个空列表。 EDIT2:示例中的错字我希望最大值不是分钟

您正在混淆递归和迭代。

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。

def twoMax(xlst):
    if xlst == []:
        return []
    else:
        return [ max(xlst[0]) ] + twoMax(xlst[1:])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM