You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对含数字的混合字符串列表进行自然排序以得到预期结果?

解决字符串列表的自然数字排序问题

默认的list.sort()方法是按字典序排序的,所以会出现'img11'排在'img2'前面的情况——因为逐个字符比较时,'1'的ASCII码小于'2'。要实现按数字大小的自然排序,需要自定义排序的key函数,提取字符串中的数字部分并转为整数作为排序依据。

方法1:固定前缀时直接切片提取数字

如果所有字符串的前缀都是固定的'img',可以直接通过字符串切片获取数字部分,转为整数:

l = ['img1','img2','img11','img3']
l.sort(key=lambda x: int(x[3:]))
print(l)
# 输出: ['img1', 'img2', 'img3', 'img11']

方法2:用正则表达式提取数字(通用场景)

如果字符串前缀不固定,或者数字位置不确定,用正则表达式提取所有数字部分更通用:

import re

l = ['img1','img2','img11','img3']
l.sort(key=lambda x: int(re.search(r'\d+', x).group()))
print(l)
# 输出: ['img1', 'img2', 'img3', 'img11']

这里re.search(r'\d+', x)会匹配字符串中的第一个连续数字序列,转为整数后作为排序的依据。

内容的提问来源于stack exchange,提问作者M.Pt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 16:55:25