我在下面有一個清單:
arr = [1,3,-10, -4, 4,10,30, -30]
我想呼叫 arr.sort 并根據絕對值對這些值進行排序,這樣如果絕對值相等,那么負值應該首先出現,如下所示:
[1, 3, -4, 4, -10, 10, -30, 30]
我知道我有幾種方法可以做到這一點,即圍繞它包裝我自己的類并運算子多載它。但是如果沒有這個,有沒有更簡單的方法可以通過使用 key 引數來做到這一點?
uj5u.com熱心網友回復:
您可以使用帶有元組的 lambda 函式,其中第一個值將根據 abs 值排序,第二個值將根據它們的實際值排序:
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]
uj5u.com熱心網友回復:
一種方法是對串列進行排序:
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]
第一種用于將所有負數移到前面。在第二種排序中,如果它們相等,則順序不受影響。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507968.html
標籤:Python python-3.x
上一篇:如何解決匯入錯誤?
