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

如何按(x,y)值(先y后x)对指定格式的文件名列表排序?

按y坐标优先、x坐标次之排序文件名列表

针对格式为output_y:{y}_x:{x}.png.png的文件名列表,实现先按y数值排序、y相同时按x数值排序的逻辑,可通过以下两种方式实现:

方法一:正则表达式提取坐标(推荐,适配格式小变动)

利用正则精准捕获文件名中的y和x数值,作为排序依据:

import re

# 替换为你的文件名列表
file_list = [
    "output_y:2_x:3.png.png",
    "output_y:1_x:5.png.png",
    "output_y:2_x:1.png.png",
    "output_y:3_x:2.png.png"
]

# 匹配y和x的数字部分
coord_pattern = re.compile(r'output_y:(\d+)_x:(\d+)\.png\.png')

# 按y→x的顺序排序
sorted_files = sorted(file_list, key=lambda fname: (
    int(coord_pattern.search(fname).group(1)),
    int(coord_pattern.search(fname).group(2))
))

# 输出排序结果
for f in sorted_files:
    print(f)

方法二:字符串分割提取坐标(格式固定时使用)

如果文件名格式完全统一,可直接通过字符串分割提取数值:

# 替换为你的文件名列表
file_list = [
    "output_y:2_x:3.png.png",
    "output_y:1_x:5.png.png",
    "output_y:2_x:1.png.png",
    "output_y:3_x:2.png.png"
]

# 按y→x的顺序排序
sorted_files = sorted(file_list, key=lambda fname: (
    int(fname.split('_y:')[1].split('_x:')[0]),
    int(fname.split('_x:')[1].split('.png.png')[0])
))

# 输出排序结果
for f in sorted_files:
    print(f)

逻辑说明

两种方法的核心都是通过sorted函数的key参数返回**(y数值, x数值)**的元组:Python在比较元组时会优先比较第一个元素(y值),只有当y值相等时才会比较第二个元素(x值),完全符合你需要的排序规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:10:16