如何在Python中正确排序带有数字的字符串?

如何在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() else text
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']

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程