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

如何高效筛选列表中含2018年后年份或无年份的字符串?

字符串列表按年份高效筛选方案

需求说明

我有一个字符串列表,需要按规则筛选:保留不含年份的字符串,以及包含2018年之后年份的字符串。现有实现可完成功能,但想寻求更高效的解法。

数据示例

data = [
    '/soccer/zimbabwe/premier-soccer-league/results/',
    '/soccer/zimbabwe/premier-soccer-league-2020/results/',
    '/soccer/zimbabwe/premier-soccer-league-2019/results/',
    '/soccer/zimbabwe/premier-soccer-league-2018/results/',
    '/soccer/zimbabwe/premier-soccer-league-2017/results/'
]

现有脚本

import re

for i in data:
    match = re.match(r".*([1-3][0-9]{3})",i)
    if match is not None: 
        if match.group(1) > '2018':
            print(i)
    else:
        print(i)

高效优化方案

现有脚本存在匹配范围过宽、未复用正则编译、仅打印结果不保存等问题,以下是更高效的实现:

import re

# 预编译正则,批量匹配时提升效率
year_pattern = re.compile(r'-(\d{4})/')

filtered_data = [
    s for s in data
    # 海象运算符简化逻辑:无年份匹配 或 年份大于2018
    if (match := year_pattern.search(s)) is None 
    or int(match.group(1)) > 2018
]

print(filtered_data)

优化点说明

  • 预编译正则:提前用re.compile编译规则,避免每次匹配重复解析正则,批量处理时效率提升明显。
  • 精准匹配规则:正则-(\d{4})/专门匹配路径中-年份/格式的四位数字,避免误匹配字符串中其他位置的无关数字。
  • 列表推导式:相比显式for循环,列表推导式是Python底层优化的语法,执行速度更快,且直接生成结果列表便于后续使用。
  • 整数比较:将匹配到的年份转为整数再比较,比字符串比较更严谨,逻辑更符合数值判断的直觉。

正确预期输出

按照需求,筛选后的结果应为:

[
    '/soccer/zimbabwe/premier-soccer-league/results/',
    '/soccer/zimbabwe/premier-soccer-league-2020/results/',
    '/soccer/zimbabwe/premier-soccer-league-2019/results/'
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:55:13