我目前正試圖排序的表格清單列表排序的字母數字:的Python列表
[["Chr1", "949699", "949700"],["Chr11", "3219", "444949"],
["Chr10", "699", "800"],["Chr2", "232342", "235345234"],
["ChrX", "4567", "45634"],["Chr1", "950000", "960000"]]
使用內置sorted()
,我得到:
[「CHR1」, ''949699','949700'],['Chr1','950000','960000'],['Chr10','699','800'],['Chr11','3219','444949'] ,''Chr2','232342','235345234'],['ChrX','4567','45634']]
但我希望「Chr2」在「Chr10」之前。我目前的解決方案包括改編自頁一些代碼:Does Python have a built in function for string natural sort?
我目前的解決辦法是這樣的:
import re
def naturalSort(l):
convert= lambda text: int(text) if text.isdigit() else text.lower()
alphanum_key= lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
if isinstance(l[0], list):
return sorted(l, key= lambda k: [alphanum_key(x) for x in k])
else:
return sorted(l, key= alphanum_key)
屈服正確的順序:
[['Chr1', '949699', '949700'], ['Chr1', '950000', '960000'], ['Chr2', '232342', '235345234'], ['Chr10', '699', '800'], ['Chr11', '3219', '444949'], ['ChrX', '4567', '45634']]
有沒有更好的方式來做到這一點?
這被稱爲 '自然排序'。 –
啊..但我認爲這可能不是一個騙局,因爲他試圖自己創造它。但是這個問題可能更適合http://codereview.stackexchange.com – aIKid
我引用了自然排序頁面。我具體詢問如何對列表進行排序。 – Megatron