我有一個字串串列,我想按字串長度對結果串列進行排序。長度相等的字串應按字母“A”在其中出現的頻率進行排序,以便具有最多 As 的字串排在最前面,其他的排在后面。我嘗試使用 lambda 函式進行排序,但它不起作用
result = sorted(result, key=len)
or
result.sort(lambda x,y: cmp(len(x), len(y)))
這是基于字串長度的完美排序,但是我有另一個條件來排序的數量好像長度相等,我該如何實作呢?
我已經嘗試了以下但無法弄清楚
result.sort(key = (lambda x,y: 1 if len(x)>len(y) else (-1 if len(x)<len(y) else (1 if x.count("A")>y.count("A") else -1))))
result = sorted(result, lambda x,y: 1 if len(x)>len(y) else (-1 if len(x)<len(y) else (1 if x.count("A")>y.count("A") else -1)))
我已經嘗試過 sort 和 sorted,
sort() takes no positional arguments
如果我沒有指定 key= Infront of lambda 和sorted expected 1 arguments, got 2
uj5u.com熱心網友回復:
你可以試試
a = ["AAd", "aAAd", "AAAd", "adAA"]
a.sort(key=lambda x: (len(x), -x.count('A')))
# output
[ 'AAd', 'AAAd', 'aAAd', 'adAA']
如果長度相等,我們首先根據長度排序,然后根據長度排序,-x.count('A')如果我們有 3 個元素,那么我們對其中的 A 進行計數,假設計數是 [3, 2, 1] 所以如果我們按升序排列它們我們將得到 [1,2,3] 但我們需要 [3,2,1] 所以我們在它們中附加了負號,例如 [-3, -2, -1]。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/522492.html
標籤:Python列表排序
