如何在 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']

更新日期:30-Sep-2019

3K+ 浏览

开启您的 职业

完成课程进行认证

开始
广告