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

Python3如何从指定格式字符串列表中提取b_前缀后的最大数字

最优Pythonic实现方案

方案1:海象运算符(Python 3.8+ 推荐)

利用海象运算符:=一次性完成匹配结果的判断和复用,完全避免重复调用match方法,代码简洁易读:

import re
ls = ["a", "b_0", "b_1", "b_2", "c", "d_0", "d_1"]
p = re.compile(r"b_(\d+)")
# 生成器表达式直接传入max,无需额外存储中间列表
res_max = max((int(m.group(1)) for item in ls if (m := p.match(item))), default=0)

说明:

  • 海象运算符在判断匹配结果不为None的同时,将匹配对象赋值给变量m,直接复用无需二次匹配
  • 用生成器表达式替代列表推导,内存占用更低,适合处理大规模列表
  • 加default=0参数,当列表中没有符合规则的b_前缀元素时,不会触发max() arg is an empty sequence报错,可根据业务需求调整默认值

方案2:兼容Python 3.8以下版本

如果使用低于3.8的Python版本不支持海象运算符,可以用map+filter组合实现无重复匹配:

import re
ls = ["a", "b_0", "b_1", "b_2", "c", "d_0", "d_1"]
p = re.compile(r"b_(\d+)")
# 先批量匹配,过滤掉None结果
matches = filter(None, map(p.match, ls))
res_max = max((int(m.group(1)) for m in matches), default=0)

可选:无正则高性能实现

如果规则明确就是b_前缀加数字,也可以不用正则,执行性能更高:

ls = ["a", "b_0", "b_1", "b_2", "c", "d_0", "d_1"]
res_max = max(
    (int(item[2:]) for item in ls 
     if item.startswith("b_") and item[2:].isdigit()),
    default=0
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:24:03