亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

按順序對列表進行排序,但刪除稍后出現的較低值

按順序對列表進行排序,但刪除稍后出現的較低值

慕沐林林 2021-12-21 17:33:48
我有一個看起來像這樣的列表:[5000, 4000, 3500, 4200, 3300]我想將這個列表從高到低排序,但也刪除任何已經被列表中較早出現的較低值“擊敗”的值。所以上面的列表應該是這樣的:[5000, 4000, 3500, 3300]我嘗試遍歷列表并將其與其他所有值進行比較,但我在 for 循環中迷失了方向。我想我錯過了一些非常明顯的東西。非常感謝任何幫助或其他文章!
查看完整描述

3 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

您可以使用列表理解:


d = [5000, 4000, 3500, 4200, 3300]

new_d = [a for i, a in enumerate(d) if not i or d[i-1] > a]

輸出:


[5000, 4000, 3500, 3300]


查看完整回答
反對 回復 2021-12-21
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

'beat' by a lower value appearing earlier in the list意味著您可以記錄當前的最小數字,并與它進行比較。如果大于最小值,則刪除它,如果小于它,則附加到結果并更新最小值。


時間復雜度:O(n)

空間復雜度:O(1)


def trim_list_high_to_low(nums):

    min_num = float('inf')

    result = []

    for num in nums:

        if num <= min_num:

            result.append(num)

            min_num = num

    return result

輸出: [5000, 4000, 3500, 3300]


查看完整回答
反對 回復 2021-12-21
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

這是一種僅將每個數字與 的最后一個值進行比較的方法new_d:


d = [5000, 4000, 3500, 4200, 3300]

new_d = d[:1]

for item in d[1:]:

    if item < new_d[-1]:

        new_d.append(item)

print(new_d)


>>> [5000, 4000, 3500, 3300]


查看完整回答
反對 回復 2021-12-21
  • 3 回答
  • 0 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號