替换为下一个最大的数字
Replace With Next Largest Number
我需要编写一个函数,用列表中下一个最高的数字替换每个数字。
假设我们有列表[5, 7, 3, 2, 8]
。
5
被 7
替换,列表变为 [7, 5, 3, 2, 8]
.
之后,我们将 5
和 8
切换为 [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]
我需要编写一个函数,用列表中下一个最高的数字替换每个数字。
假设我们有列表[5, 7, 3, 2, 8]
。
5
被 7
替换,列表变为 [7, 5, 3, 2, 8]
.
之后,我们将 5
和 8
切换为 [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]