如何按末尾数字降序排列指定格式PNG文件名的嵌套列表
按文件名中的数字降序排序嵌套列表
可以用Python内置的sorted()函数配合自定义排序键实现需求,核心是提取每个文件名里35_2_后的数字,转成整数作为排序依据,再设置降序排列:
list_ = [['35_2_20.png'], ['35_2_18.png'], ['35_2_9.png'], ['35_2_11.png'], ['35_2_7.png'], ['35_2_16.png'], ['35_2_6.png'], ['35_2_17.png'], ['35_2_1.png'], ['35_2_10.png'], ['35_2_19.png'], ['35_2_8.png'], ['35_2_4.png'], ['35_2_15.png'], ['35_2_3.png'], ['35_2_12.png'], ['35_2_2.png'], ['35_2_13.png'], ['35_2_5.png'], ['35_2_14.png']] # 生成排序后的新列表 sorted_list = sorted(list_, key=lambda x: int(x[0].split('_')[2].split('.')[0]), reverse=True) # 验证结果 for item in sorted_list: print(item)
代码说明:
lambda x: int(x[0].split('_')[2].split('.')[0]):排序的核心逻辑:x[0]:取出每个子列表里的唯一文件名split('_')[2]:按下划线分割文件名,取第三段(比如35_2_20.png分割后得到['35','2','20.png'],第三段是20.png)split('.')[0]:按小数点分割,取第一段得到数字字符串20int(...):把字符串转成整数,确保排序是按数字大小而非字符串字典序
reverse=True:设置为降序排列,满足从大到小的要求
如果想要直接修改原列表而非生成新列表,用列表的sort()方法即可:
list_.sort(key=lambda x: int(x[0].split('_')[2].split('.')[0]), reverse=True)
内容的提问来源于stack exchange,提问作者mosa lorans
相关产品推荐
相关产品推荐

