【问题标题】:How to sort a list of alphanumeric strings in one or more conditions?如何在一个或多个条件下对字母数字字符串列表进行排序?
【发布时间】:2018-03-03 17:13:30
【问题描述】:

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

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']

但是如果我同时运行这两个操作,我的列表又会变得混乱。我如何确保我能够根据我的要求进行排序?

【问题讨论】:

  • 你知道在你当前的排序中'16_'会在'6_'之前吗?

标签: python regex python-3.x list sorting


【解决方案1】:

这是一种方法:

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']

【讨论】:

  • 这就是我想要的。谢谢!
猜你喜欢
  • 2020-06-02
  • 2021-02-21
  • 2021-09-19
  • 2022-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
相关资源
最近更新 更多