簡體   English   中英

根據它們包含的數字重新排序列表中的字符串

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

它根據"_"之后最右邊的數字排序。 轉換為int實現"test_10"將在"test_9"之后(如果您僅按字符串排序,這不是您得到的)。

如果文件的目錄是一致的,那么您可以按原樣排序。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM