如何在 Python 中正確排序帶有數字的字串?


你希望根據字串中的數字進行排序的這種排序型別稱為自然排序或人性化排序。例如,如果你有以下文字

['Hello1','Hello12', 'Hello29', 'Hello2', 'Hello17', 'Hello25']

 然後你希望排序後的列表是

['Hello1', 'Hello2','Hello12', 'Hello17', 'Hello25', 'Hello29']

 而不是

['Hello1','Hello12', 'Hello17', 'Hello2', 'Hello25', 'Hello29']

 為此,我們可以使用 sort() 使用的額外引數。這是一個函式,用於根據列表中的條目計算鍵。我們使用正則表示式從字串中提取數字,並在文字和數字上進行排序。 

 import re
 def atoi(text):
    return int(text) if text.isdigit() elsetext
def natural_keys(text):
    return [ atoi(c) for c in re.split('(\d+)',text) ]
 my_list =['Hello1', 'Hello12', 'Hello29', 'Hello2', 'Hello17', 'Hello25']
 my_list.sort(key=natural_keys)
print my_list

 這會為你提供以下輸出

['Hello1','Hello2', 'Hello12', 'Hello17', 'Hello25', 'Hello29']

更新日期:2019 年 9 月 30 日

3K+ 瀏覽量

開啟你的 職業生涯

完成課程獲得認證

開始吧
廣告
© . All rights reserved.