替换为下一个最大的数字



我需要编写一个函数,将每个数字替换为列表中下一个最高的数字。
假设我们有一个列表[5, 7, 3, 2, 8]57取代,列表变成了[7, 5, 3, 2, 8]
之后,我们交换58,所以它变成了[7, 8, 3, 2, 5]。最后,整个列表的最大值被-1代替。

到最后,这个例子应该输出[7, 8, 5, 3, -1]。我写了这样的代码:

def replace_next_largest(lst):  
maxes = []
for i in range(len(lst)):
check = lst[i]
next_mx = [i for i in lst if i > check and not i in maxes]
if next_mx:
maxes.append(next_mx[0])
else:
if maxes.insert(lst.index(max(lst)),-1 ) 
return maxes

,但它不能与输入[4, 1, 6, -7, -8, 2]一起工作,但它适用于上面提到的其他列表和所有其他测试。我的输出是[6, 4, -1, -1, 1, -7],应该是
[6, 2, -1, 1, -7, 4]


[6, 4, -1, -1, 1, -7]<
[6, 2, -1, 1, -7, 4]<——正确答案

它适用于[5, 7, 3, 2, 8],[2, 3, 4, 5][1, 0, -1, 8, -72]

根据您想要的结果,您可以对列表进行排序,然后进行查找,查找与下一个最大的数字对。这样你就可以替换列表中的项目了。通过将值压缩成对,最大的值将不包含条目。当你试图查找它时,你可以用-1替换它。

def swap_large(l):
s = sorted(l)
d = {k:v for k, v in zip(s, s[1:])}

return [d.get(n, -1) for n in l]
swap_large([5, 7, 3, 2, 8])
# [7, 8, 5, 3, -1]
swap_large([4, 1, 6, -7, -8, 2])
# [6, 2, -1, 1, -7, 4]

最新更新