对嵌入数字的字符串进行排序
处理包含数字的字符串时,按字母顺序对它们进行排序可能不会产生所需的结果。要正确对此类字符串进行排序,您需要同时考虑文本和数字部分。
人工排序(自然排序)
自然排序,也称为人工排序,是一种用于以与人类感知方式一致的方式对项目进行排序的技术。这种方法涉及从字符串中提取数字,然后根据其数值对它们进行排序。
在 Python 中,您可以使用以下自定义排序键实现自然排序:
def natural_keys(text): return [int(c) if c.isdigit() else c for c in re.split(r'(\d+)', text)]
此函数将字符串拆分为字符和数字,然后将数字字符转换为整数。排序列表是通过使用以下自定义键调用 sort() 函数来获得的:
alist = ["something1", "something12", "something17", "something2", "something25", "something29"] alist.sort(key=natural_keys) print(alist)
输出将是:
['something1', 'something2', 'something12', 'something17', 'something25', 'something29']
使用浮点数对字符串进行排序
如果您的字符串包含浮点数,您可以修改自然排序键以使用以下命令提取并转换为浮点数以下正则表达式:
def natural_keys(text): return [float(c) if c.isdigit() else c for c in re.split(r'[+-]?([0-9]+(?:[.][0-9]*)?|[.][0-9]+)', text)]
此修改后的键还允许您使用浮点数对字符串进行排序:
alist = ["something1", "something2", "something1.0", "something1.25", "something1.105"] alist.sort(key=natural_keys) print(alist)
输出将为:
['something1', 'something1.0', 'something1.105', 'something1.25', 'something2']
通过利用人类排序技术,您可以以符合人类直觉的方式对嵌入数字的字符串进行高效排序。
以上是如何在Python中自然地对包含数字的字符串进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!