我试图使用列表推导找到给定数字列表中的两个最大元素。
这是我到目前为止所尝试的。我也试过使用过滤器'代替这个功能。
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]
任何帮助将不胜感激!
编辑 我没想过简单地整理它!我将使用列表推导对其进行排序并提取最大值。谢谢!
答案 0 :(得分:1)
您可以简单地对列表进行排序并获得最大的两个数字。我从here
复制并粘贴了冒泡排序代码def top_two(l):
for n in range(len(l)-1,0,-1):
for i in range(n):
if l[i]>l[i+1]:
temp = l[i]
l[i] = l[i+1]
l[i+1] = temp
return l[-1],l[-2]
答案 1 :(得分:0)
排序是一种解决方案,但对于长列表,它可能比需要的更昂贵,因为它不是线性的。 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]
是最大值。请注意,这假设您的列表至少有两个长度。
注意:如果您使用的是Python3,则必须使用functools.reduce
。