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

Python中含字母数字混合字符串列表的自定义排序问题

自定义排序实现优先按后缀、再按括号内数字排序

你的原始列表定义如下:

s1 = 'foo[2]_bar'
s2 = 'foo[2]_ant'
s3 = 'foo[1]_bar'
s4 = 'foo[1]_ant'
s5 = 'foo[10]_bar'
s6 = 'foo[10]_ant'
str_arr = [s1, s2, s3, s4, s5, s6]

默认的str_arr.sort()会按字符串的字符顺序排序,导致括号里的数字按字符串规则比较('10'会排在'1'前面),且后缀的顺序也不符合预期。要实现你要的排序效果,给sort()方法传入自定义的key参数即可,核心是用lambda函数构造合适的排序依据,不需要用到filter。

解决方案代码

str_arr.sort(key=lambda x: (x.split('_')[1], int(x.split('[')[1].split(']')[0])))
# 输出排序结果
for s in str_arr:
    print(s)

代码解释

lambda函数会为每个字符串生成一个元组作为排序键,排序时先按元组第一个元素比较,再按第二个元素比较:

  • 第一个元素x.split('_')[1]:把字符串按_分割,取后半段的ant或bar,确保所有ant排在bar前面
  • 第二个元素int(x.split('[')[1].split(']')[0]):先按[分割取后半段,再按]分割取前半段,得到括号里的数字字符串,转成整数后实现数字大小排序(而非字符串排序)

执行后输出的结果完全符合你的期望:

foo[1]_ant
foo[2]_ant
foo[10]_ant
foo[1]_bar
foo[2]_bar
foo[10]_bar

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:03:53