根据它们包含的数字重新排序列表中的字符串

Reordering strings in a list based on number they contain

假设我有一个目录文件路径列表作为字符串,如下所示:

当前:


['/home/me/summary_generating/test_2', '/home/me/summary_generating/test_1', /home/me/summary_generating/test_3, /home/me/summary_generating/test_5]


理想情况下,我想做的是提取基本名称中出现的任何数字(在本例中为 test_*),然后重新排序此列表,使其按升序排列,如下所示:

期望:


['/home/me/summary_generating/test_1', '/home/me/summary_generating/test_2', /home/me/summary_generating/test_3, /home/me/summary_generating/test_5]


我目前的想法是尝试提取基本名称,使用正则表达式来识别基本名称中的数字,以某种方式通过相应的数字索引列表中的每个项目(例如索引 0 将是 /home/me/summary_generating/test_1) 然后使用索引重新排序。但是,这似乎很复杂,我想知道是否有更好的方法?

一如既往,我们将不胜感激!

假设所有 test_ 文件都在同一目录中:

lst = ['/home/me/summary_generating/test_2',
       '/home/me/summary_generating/test_1',
       '/home/me/summary_generating/test_3',
       '/home/me/summary_generating/test_5']


lst.sort(key=lambda x: int(x.rsplit("_", maxsplit=1)[1]))

排序后的列表是:

['/home/me/summary_generating/test_1',
 '/home/me/summary_generating/test_2',
 '/home/me/summary_generating/test_3',
 '/home/me/summary_generating/test_5']

按照"_"后的right-most数排序。转换为 int 实现 "test_10" 将在 "test_9" 之后(如果您仅按字符串排序,这不是您得到的结果)。

如果文件的目录一致,那么您可以按原样排序。

如果您只想按文件名排序而忽略位置,那么您可以在密钥中拆分 '/' 并仅提取文件名。

sorted(file_paths, key=lambda x: x.split("/")[-1])