[英]How to sort a list of alphanumeric strings in lexicographic order
我有一個包含字母數字值的字符串列表,我想使用中間值作為參數對其進行排序。
例如,我有以下列表:
test = ["ykc 82 01" , "ao first qx" , "teste teste teste" , "a1 03 02" , "ga eai oie"]
我想對它進行排序,但使用第二個值作為參數,例如在這種情況下,所需的 output 應該是:
["ga eai oie" , "ao first qx" , "teste teste teste" , "a1 03 02" , "ykc 82 01"]
第一個元素是中間有“eai”的字符串,因為它以字母“e”開頭,第二個元素是中間有“first”的字符串,因為它以字母“f”開頭,依此類推,最后一個元素是包含數值的元素,順序不限。
我嘗試使用鍵對 function 進行排序,如下所示:
test.sort(key = lambda x: (x.split()[1]))
但它首先返回包含數值的元素,然后返回具有數字值的元素:
['a1 03 02', 'ykc 82 01', 'aa eai oie', 'eo first qx', 'teste teste teste']
您可以創建一個自定義排序 function,它返回一個二元組,將字母值放在第一位,將數字值放在最后:
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))
Output:
['ga eai oie', 'ao first qx', 'teste teste teste', 'a1 03 02', 'ykc 82 01']
需要傳入稍微復雜一點的key
function:
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 。 使用chr(123)
給我們一個字符,其 ASCII 值高於所有字母字符,這意味着完全是數字的字符串將放在最后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.