如何在不使用循环的情况下在python中查找列表中的最大值

如何在不使用循环的情况下在python中查找列表中的最大值,python,functional-programming,list-comprehension,Python,Functional Programming,List Comprehension,我试图通过列表理解找到给定数字列表中两个最大的元素 这就是我迄今为止所尝试的。我还尝试使用“filter”函数来代替它 def top_two(l): l1 = [lambda x,y:x > y for x in l] return l1 我也尝试过类似的东西,但也不起作用 def top_two(l): l1 = [l[x] for x in range(len(l)) for y in l[x:] if l[x] > y] 任何帮助都将不胜感激 编辑

我试图通过列表理解找到给定数字列表中两个最大的元素

这就是我迄今为止所尝试的。我还尝试使用“filter”函数来代替它

def top_two(l):
    l1 = [lambda x,y:x > y for x in l]
    return l1
我也尝试过类似的东西,但也不起作用

def top_two(l):
    l1 = [l[x] for x in range(len(l)) for y in l[x:] if l[x] > y]
任何帮助都将不胜感激


编辑我没有想到简单地对它排序!我将按列表理解对其进行排序并提取最大值。谢谢

您只需对列表进行排序,就可以得到最大的两个数字。我从中复制并粘贴气泡排序代码


排序是一种解决方案,但对于长列表,它可能比需要的更昂贵,因为它不是线性的。Python远非FP最优雅的语言,但您可以使用
reduce
一次找到最大的元素

def add_largest_to_pair(pair, num):
    # This function takes a pair and a number and returns a pair made of the two largest of those three
    if pair[1] > num >= pair[0]:
        return (num, pair[1])
    elif num >= pair[1]:
        return (pair[1], num)
    else:
        return pair

def top_two(l):
    return reduce(
        add_largest_to_pair,
        l,
        (float('-inf'), float('-inf'))
    )
这将返回两个最大值的元组,
pair[0]
是第二大值,
pair[1]
是最大值。请注意,这假设您的列表至少有两个长度


注意:您必须使用
functools。如果您使用的是Python3,请减少

您是否希望我们为您做作业?请提出问题的一般解决方案,然后针对具体问题提出具体问题。我道歉!这不是一个家庭作业问题,只是我正在试图解决的问题。你能把它分类并考虑最后两个要素吗?或者你应该严格使用列表理解吗?你删掉的东西就像一个作业。十行肯定足够用Python编写排序函数了。谢谢,你有个好主意!我想我会尝试使用包含列表理解的快速排序,然后提取最大值。
def add_largest_to_pair(pair, num):
    # This function takes a pair and a number and returns a pair made of the two largest of those three
    if pair[1] > num >= pair[0]:
        return (num, pair[1])
    elif num >= pair[1]:
        return (pair[1], num)
    else:
        return pair

def top_two(l):
    return reduce(
        add_largest_to_pair,
        l,
        (float('-inf'), float('-inf'))
    )