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

基于子串排序Python字符串列表:sorted方法排序结果异常问题

解决字符串中数字部分的自然排序问题

哦,我太懂这个坑了!你现在遇到的问题是字符串字典序排序和数字大小排序的差异——你的func函数提取出来的是字符串类型的数字(比如'8'、'18'、'78'),而Python对字符串排序时是逐个字符比较的:'18'的第一个字符是'1',比'8'的第一个字符'8'小,所以它会被排在'8'前面,这就导致了不符合预期的结果。

修复方案:把提取的字符串转成整数

只需要在func里把提取到的数字字符串转换成整数类型,这样sorted就会按照数字的实际大小来排序了。修改后的代码如下:

# sort using the number part of the string
mylist = ['XYZ-78.txt', 'XYZ-8.txt', 'XYZ-18.txt']
def func(elem):
    # 将提取的数字字符串转为整数,实现按数字大小排序
    return int(elem.split('-')[1].split('.')[0])
sortlist = sorted(mylist, key=func)
for i in sortlist:
    print(i)

运行这段代码后,输出就是你期望的结果:

XYZ-8.txt
XYZ-18.txt
XYZ-78.txt

更简洁的写法(用lambda表达式)

如果不想单独定义函数,用lambda表达式可以让代码更紧凑:

mylist = ['XYZ-78.txt', 'XYZ-8.txt', 'XYZ-18.txt']
sortlist = sorted(mylist, key=lambda x: int(x.split('-')[1].split('.')[0]))
for i in sortlist:
    print(i)

这个写法和上面的效果完全一致,只是把排序逻辑直接嵌入到了sorted的key参数里。

内容的提问来源于stack exchange,提问作者Amit Rastogi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:37:05