簡體   English   中英

如何使用鍵參數根據兩個條件對列表進行排序

[英]How to sort list based on two conditions using key parameter

我在下面有一個清單:

arr = [1,3,-10, -4, 4,10,30, -30]

我想調用 arr.sort 並根據絕對值對這些值進行排序,這樣如果絕對值相等,那么負值應該首先出現,如下所示:

[1, 3, -4, 4, -10, 10, -30, 30]

我知道我有幾種方法可以做到這一點,即將我自己的 class 包裝在這個周圍並讓操作員重載它。 但是如果沒有這個,有沒有更簡單的方法可以通過使用 key 參數來做到這一點?

您可以將 lambda function 與元組一起使用,其中第一個值將根據絕對值排序,第二個值將根據其實際值排序:

In [1]: arr = [1,3,-10, -4, 4,10,30, -30]

In [2]: sorted(arr, key=lambda x: (abs(x), x))
Out[2]: [1, 3, -4, 4, -10, 10, -30, 30]

一種方法是對列表進行排序:

a = [1, 3, -10, -4, 4, 10, 30, -30]

sorted(a)
# [-30, -10, -4, 1, 3, 4, 10, 30]

然后使用abs作為鍵對其進行排序。

sorted(sorted(a), key=abs)
# [1, 3, -4, 4, -10, 10, -30, 30]

第一種用於將所有負數移到前面。 在第二種排序中,如果它們相等,則順序不受影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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