Jeff Atwood讨论了自然排序,并举例说明了使用Python进行排序的一种方法。这是我的变化形式:
import re
def sorted_nicely( l ):
""" Sort the given iterable in the way that humans expect."""
convert = lambda text: int(text) if text.isdigit() else text
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
return sorted(l, key = alphanum_key)
像这样使用:
s = set(['booklet', '4 sheets', '48 sheets', '12 sheets'])
for x in sorted_nicely(s):
print(x)
输出:
4 sheets
12 sheets
48 sheets
booklet
此方法的一个优点是,当字符串之间用空格分隔时,该方法不仅有用。它也适用于其他分隔符,例如版本号中的句点(例如1.9.1在1.10.0之前)。