Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在一个或多个条件下对字母数字字符串列表进行排序?_Python_Regex_Python 3.x_List_Sorting - Fatal编程技术网

Python 如何在一个或多个条件下对字母数字字符串列表进行排序?

Python 如何在一个或多个条件下对字母数字字符串列表进行排序?,python,regex,python-3.x,list,sorting,Python,Regex,Python 3.x,List,Sorting,我有一个文件名列表,为了执行某些操作,我需要将这些文件名按一定顺序排列。这些文件名是字母数字字符串,位于如下列表中 lis = ["8_19_dm12_file", "3_19_dm14_file", "8_19_dm9_file", "2_19_dm1_file", "3_19_dm2_file"] lis = ["2_19_dm1_file", "3_19_dm2_file", "3_19_dm14_file", "8_19_dm9_file", "8_19_dm12_file"] 现

我有一个文件名列表,为了执行某些操作,我需要将这些文件名按一定顺序排列。这些文件名是字母数字字符串,位于如下列表中

lis = ["8_19_dm12_file", "3_19_dm14_file", "8_19_dm9_file", "2_19_dm1_file", "3_19_dm2_file"]
 lis = ["2_19_dm1_file", "3_19_dm2_file", "3_19_dm14_file", "8_19_dm9_file", "8_19_dm12_file"]
现在我需要先根据第一个数字按升序排序,然后根据最后一个数字按升序排序

lis = ["8_19_dm12_file", "3_19_dm14_file", "8_19_dm9_file", "2_19_dm1_file", "3_19_dm2_file"]
 lis = ["2_19_dm1_file", "3_19_dm2_file", "3_19_dm14_file", "8_19_dm9_file", "8_19_dm12_file"]
目前,我可以单独完成这项工作。我可以通过这样做,根据第一个数字进行排序

lis.sort(key=lambda x: x.split('_')[0])

['2_19_dm1_file', '3_19_dm14_file', "3_19_dm2_file" '8_19_dm12_file', '8_19_dm9_file']
lis.sort(key=lambda x: int(re.findall(r'\d+', x.split("_")[2])[0]))

['2_19_dm1_file', "3_19_dm2_file" '8_19_dm9_file', '8_19_dm12_file', '3_19_dm14_file']
在一个单独的操作中,我可以通过这样的操作根据最后一个数字进行排序

lis.sort(key=lambda x: x.split('_')[0])

['2_19_dm1_file', '3_19_dm14_file', "3_19_dm2_file" '8_19_dm12_file', '8_19_dm9_file']
lis.sort(key=lambda x: int(re.findall(r'\d+', x.split("_")[2])[0]))

['2_19_dm1_file', "3_19_dm2_file" '8_19_dm9_file', '8_19_dm12_file', '3_19_dm14_file']
但是如果我同时运行这两个操作,我的列表会再次混乱。我如何确保能够根据我的要求进行排序?

这里有一种方法:

lst = ["8_19_dm12_file", "3_19_dm14_file", "8_19_dm9_file", "2_19_dm1_file", "3_19_dm2_file"]

def orderer(x):
    s = x.split('_')
    return list(map(int, s[:2])) + [int(s[2][2:])]

lst_sorted = sorted(lst, key=orderer)

# ['2_19_dm1_file', '3_19_dm2_file', '3_19_dm14_file', '8_19_dm9_file', '8_19_dm12_file']

你知道在你当前的排序中,“16”将在“6”之前吗?这就是我想要的。谢谢!