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