用python对列表进行规则排序

2024-05-29 03:01:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张这样的清单

['File3', 'File007', 'File3a', 'File10', 'File11', 'File1', 'File4', 'File5', 'File9', 'File8', 'File8b1', 'File8b2', 'File8b11', 'File6']

当我用python中的sorted()对它进行排序时。它将变成这样:

['File007', 'File1', 'File10', 'File11', 'File3', 'File3a', 'File4', 'File5', 'File6', 'File8', 'File8b1', 'File8b11', 'File8b2', 'File9']

但我想要的是:

['File1', 'File3', 'File3a', 'File4', 'File5', 'File6', 'File007', 'File8', 'File8b1', 'File8b2', 'File8b11', 'File9', 'File10', 'File11']

其编号必须为: 文件1、文件2、文件3、文件10

不像: 文件1、文件10、文件2、文件3

如果它有像这个文件007这样的0位数字,它将计为7

如果数字后面有字母表,如File3a,则排序如下: 文件3、文件3A、文件3B

有没有办法在列表排序时添加此规则


Tags: 文件file1file3file4file5file6file10file11
2条回答

是的,您可以使用排序过程中运行的函数

# Sort a list based on removing leading zeros
def mysort(x): 
    return int(str(x).replace("0",""))

L = ["002", "013", "001", "005"] 

print ("Normal sorting :", sorted(L)) 
print ("Sorted with key:", sorted(L, key = mysort)) 

通过将key关键字参数传递给sorted函数,可以定义自己的排序规则。某些代码似乎完全符合您的要求,可能如下所示:

import re

def key_fn(f):
    # the f[4:] part just gets the part of each string after 'File'
    groups = re.match(r'(\d*)(\D*)(\d*)', f[4:]).groups()
    def try_parse_int(x):
        # x should be either an empty string or something we can
        # parse into an int
        try:
            return int(x)
        except ValueError:
            return None
    return try_parse_int(groups[0]), groups[1], try_parse_int(groups[2])

files = ['File3','File007','File3a','File10','File11','File1','File4','File5',
    'File9','File8','File8b1','File8b2','File8b11','File6']

sorted_files = sorted(files, key=key_fn)

这支持任意数量的数字,后跟(可选)任意数量的非数字,再后跟(可选)任意数量的数字

相关问题 更多 >

    热门问题