【问题标题】:<Python> Sort list of strings alphanumerically [duplicate]<Python>按字母数字排序字符串列表[重复]
【发布时间】:2021-01-25 22:24:21
【问题描述】:

那里有很多字母数字排序,但我真的不明白它们是如何工作的,最后我的结果是错误哈哈

但这是使用我需要的排序的代码部分 (我现在只是在试验我的项目,这部分我难住了哈哈)

import os
path = 'C:\\path'

pokeimage = os.listdir(path)

哪个输出

['1.jpg', '10.jpg', '100.jpg', '101.jpg', '102.jpg', '103.jpg', '104.jpg', '105.jpg', '106.jpg', '107.jpg', '108.jpg', '109.jpg', '11.jpg', '110.jpg', '111.jpg', '112.jpg', '113.jpg', '114.jpg', '115-mega.jpg', '115.jpg', '116.jpg', '117.jpg', '118.jpg', '119.jpg', '12.jpg', '120.jpg', '121.jpg', '122.jpg', '123.jpg', '124.jpg', '125.jpg', '126.jpg', '127-mega.jpg', '127.jpg', '128.jpg', ...]

是的,它们是图像的文件名,我只是希望列表能够正常排序

['1.jpg', '2.jpg', '3.jpg', '4.jpg', ...]

但是使用正常的排序和键等,它只是像第一个那样排序。

【问题讨论】:

  • 这些都是字符串。所以从词汇上来说,'10' 和 '100' 都在 '2' 之前。您需要将它们视为数字,以便对它们进行数字排序。做你的研究。并重新命名您的问题。

标签: python list sorting alphanumeric


【解决方案1】:

您可以定义自己的排序键函数来提取文件编号并按数字排序

import re

file_names = [
    '1.jpg', '10.jpg', '100.jpg', '101.jpg', '102.jpg', '103.jpg', '104.jpg', '105.jpg', '106.jpg', '107.jpg',
    '108.jpg', '109.jpg', '11.jpg', '110.jpg', '111.jpg', '112.jpg', '113.jpg', '114.jpg', '115-mega.jpg', '115.jpg',
    '116.jpg', '117.jpg', '118.jpg', '119.jpg', '12.jpg', '120.jpg', '121.jpg', '122.jpg', '123.jpg', '124.jpg',
    '125.jpg', '126.jpg', '127-mega.jpg', '127.jpg', '128.jpg']


def sort_key(file_name):
    # match one one or more digits at the beginning of the file name
    file_number_str = re.match('[0-9]+', file_name)
    if file_number_str is not None:
        # if file number pattern is found convert the number string into an integer
        return int(file_number_str.group())
    else:
        # if file name does not start with a number return -1
        return -1


# sort file names with custom key function
file_names.sort(key=sort_key)

print(file_names)
# ['1.jpg', '10.jpg', '11.jpg', '12.jpg', '100.jpg', '101.jpg', '102.jpg', ...

【讨论】:

    猜你喜欢
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    相关资源
    最近更新 更多