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