簡體   English   中英

如何按字典順序對字母數字字符串列表進行排序

[英]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.

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