我有一個帶有字母數字值的字串串列,我想使用中間值作為引數對其進行排序。
例如,我有以下串列:
test = ["ykc 82 01" , "ao first qx" , "teste teste teste" , "a1 03 02" , "ga eai oie"]
我想對其進行排序,但使用第二個值作為引數,例如在這種情況下,所需的輸出應該是:
["ga eai oie" , "ao first qx" , "teste teste teste" , "a1 03 02" , "ykc 82 01"]
第一個元素是中間有“eai”的字串,因為它以字母“e”開頭,第二個元素是有“first”的字串,因為它以字母“f”開頭,依此類推,然后最后一個元素是以任意順序包含數值的元素。
我嘗試使用帶有鍵的排序功能進行排序,如下所示:
test.sort(key = lambda x: (x.split()[1]))
但它首先回傳包含數值的元素,然后回傳具有數字值的元素:
['a1 03 02', 'ykc 82 01', 'aa eai oie', 'eo first qx', 'teste teste teste']
uj5u.com熱心網友回復:
您可以創建一個自定義排序函式,該函式回傳一個 2 元組,它將字母值放在首位,數值放在最后:
test = ["ykc 82 01" , "ao first qx" , "teste teste teste" , "a1 03 02" , "ga eai oie"]
def sort_func(value):
_, mid, _ = value.split()
return mid.isnumeric(), mid
print(sorted(test, key=sort_func))
輸出:
['ga eai oie', 'ao first qx', 'teste teste teste', 'a1 03 02', 'ykc 82 01']
uj5u.com熱心網友回復:
你需要傳入一個稍微復雜的key函式:
test.sort(key=lambda x: chr(123) if x.split()[1].isnumeric() else x)
這輸出:
['ao first qx', 'ga eai oie', 'teste teste teste', 'ykc 82 01', 'a1 03 02']
解釋:
任何字母字符的最高 ASCII 值是122。Usingchr(123)給了我們一個 ASCII 值高于所有字母字符的字符,這意味著完全是數字的字串將放在最后。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/470756.html
上一篇:如何將字串值轉換為十六進制
