替换为下一个最大的数字

Replace With Next Largest Number

我需要编写一个函数,用列表中下一个最高的数字替换每个数字。
假设我们有列表[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]