![](/img/trans.png)
[英]How to sort a list by number first in descending order and then by alphabet in ascending order
[英]How to sort a list in descending order for the first criteria and ascending order for the second criteria?
我知道您可以使用 sort 或 sorted 函數使用多個條件對列表進行排序,如下所示:
list = sorted(list, key=lambda x:(x[0], x[1]))
上面的代碼按升序對列表進行排序,並且僅當第一個參數等於另一個元素時,列表才按照第二個條件按升序排序。
如果包含參數reverse=True
,它將與我上面所說的一樣,但列表將在兩個條件中按降序排序。
但這不是我想要的。 我想按降序對列表進行排序,如果元素相等,則元組將按第二個元素按升序排序。
例如,這段代碼:
list = [(99, 41), (85, 33), (99, 28)]
list = sorted(list, key=lambda x:(x[0], x[1]), reverse=True)
print(list)
打印 [(99, 41 ), (99, 28 ), (85, 33)] 但我想打印: [(99, 28 ), (99, 41 ), (85, 33)]
>>> new_list = sorted(list, key=lambda x:(x[0], 1/x[1]), reverse=True)
>>> print(new_list)
[(99, 28), (99, 41), (85, 33)]
此 lambda 函數按升序排列,但不是基於 x[0] 和 x[1],而是按 x[0] 和 1/x[1]
1/x[1] 只是 x[1] 的倒數,它會隨着 x[1] 變大而變小
例如:
試試這種方式,也許有幫助:
它之所以有效,是因為您的項目是元組,所以我們使用這些技巧按不同的降序/升序對它們進行排序。 所以第一個是降序,第二個是升序,如圖所示。
注意 - 請不要使用 Python內置作為變量名。
>>> L = [(99, 41), (85, 33), (99, 28)]
>>> sorted(L, key=lambda x: (-x[0], x[1]))
[(99, 28), (99, 41), (85, 33)]
>>> A = [(12, 22), (13, 33), (12, 12), (13, 3)]
>>> A.sort(key=lambda x: (-x[0], x[1])) # in-place sort
>>>
>>> A
[(13, 3), (13, 33), (12, 12), (12, 22)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.