You need to enable JavaScript to run this app. 如何从Python已排序的带倍率图片文件名列表中提取各分组最高倍率条目
优惠活动
大模型
产品
解决方案
定价
更多

如何从Python已排序的带倍率图片文件名列表中提取各分组最高倍率条目

实现思路

基于题目给出的两个明确输入规则,可以做轻量化、低开销实现:

  • 输入列表a_list已完成预排序,同一分组的文件名会连续相邻排列
  • 同一分组的倍率序列为无缺失的等差数列,即同组内倍率随列表顺序递增,同组的最后一个元素就是倍率最高的条目

无需遍历全量记录每个分组的最大倍率,仅需通过拆分文件名的分组前缀、判断相邻元素的分组是否切换,即可收集到所有分组的最高倍率条目。

具体实现

拆分规则

严格遵循题目定义:取文件名末尾匹配\d+x格式的部分作为倍率标识,该部分之前的所有内容作为分组判定前缀。

核心代码

import re

def get_highest_res_entries(a_list):
    # 预编译正则:匹配格式为【任意前缀 + 末尾数字 + x】的文件名,捕获分组前缀、倍率数值
    pattern = re.compile(r'^(.*?)(\d+)x$')
    result = []
    current_group = None
    
    for idx, filename in enumerate(a_list):
        match = pattern.match(filename)
        if not match:
            # 按题目约定输入均为合法格式,此处可根据需要增加异常处理逻辑
            continue
        prefix = match.group(1)
        
        # 检测到遍历进入新分组
        if prefix != current_group:
            # 非列表起始位置时,上一个分组已遍历完成,将该组最后一个条目加入结果
            if idx != 0:
                result.append(a_list[idx - 1])
            # 更新当前追踪的分组标识
            current_group = prefix
    
    # 遍历结束后,将最后一个分组的最高倍率条目加入结果
    if a_list:
        result.append(a_list[-1])
    return result

效果验证

使用题目给出的示例输入测试:

a_list = [
    'img_229_152_webp_1x', 
    'img_229_152_webp_2x', 
    'img_229_152_webp_3x', 
    'img_229_152_webp_4x', 
    'img_229_152_webp_5x', 
    'img_246_164_webp_1x', 
    'img_246_164_webp_2x', 
    'img_246_164_webp_3x', 
    'img_246_164_webp_4x'
]

print(get_highest_res_entries(a_list))
# 输出结果:['img_229_152_webp_5x', 'img_246_164_webp_4x'],与预期完全一致
方案特点
  • 时间复杂度为O(n),仅对列表做一次线性遍历,无需额外存储所有分组的全量条目,内存开销极低
  • 拆分逻辑严格匹配题目定义的倍率识别规则,不会误将文件名中间的数字x片段判定为倍率标识
  • 适配所有题目约定的合法输入场景,对空列表、单分组等边界情况也能正常处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 02:45:05