如何在不使用循环的情况下在python中查找列表中的最大值
我试图通过列表理解找到给定数字列表中两个最大的元素 这就是我迄今为止所尝试的。我还尝试使用“filter”函数来代替它如何在不使用循环的情况下在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] 任何帮助都将不胜感激 编辑
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'))
)