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”之前吗?这就是我想要的。谢谢!