根据它们包含的数字重新排序列表中的字符串
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])
假设我有一个目录文件路径列表作为字符串,如下所示:
当前:
['/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])