簡體   English   中英

如何按第一個條件的降序和第二個條件的升序對列表進行排序?

[英]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] 變大而變小

例如:

  • 1/28 = 0.03571
  • 1/33 = 0.03030
  • 1/48 = 0.02083

試試這種方式,也許有幫助:

它之所以有效,是因為您的項目是元組,所以我們使用這些技巧按不同的降序/升序對它們進行排序。 所以第一個是降序,第二個是升序,如圖所示。

注意 - 請不要使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM