我需要撰寫一個函式,用串列中的下一個最高數字替換每個數字。
假設我們有清單[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
但它不適用于 input [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]
uj5u.com熱心網友回復:
根據您想要的結果,您可以對串列進行排序,然后進行查找以找到具有下一個最大數字的對。有了它,您只需替換串列中的專案。通過成對壓縮值,最大值將沒有條目。-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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/479290.html
