我有一個包含一些鏈接的串列: ["http://link1.rar", "http://link1.rev","http://link2.rar","http://link2.rev"] 是有一種方法可以對它們進行排序,使其看起來像: ["http://link1.rar", "http://link2.rar", "http://link1.rev", "http://link2 .rev"]
我試過這個:
def order(x):
if "rar" not in x:
return x
else:
return ""
new_links = sorted(links, key=order)
但是通過這種方式,rev 鏈接是從最高的排序的。
uj5u.com熱心網友回復:
您要根據多個標準來解決:首先,檔案擴展名;然后,整個字串。
根據多個標準進行排序的常用技巧是使用元組作為鍵。元組按字典順序排序,即先比較第一個標準;如果出現平局,則比較第二個標準。
例如,以下鍵回傳一個元組,例如(False, 'http://link1.rar')or (True, 'http://link1.rev'):
new_links = sorted(links, key=lambda x: ('rar' not in x, x))
或者,您可以使用str.rsplit在最后一個拆分字串'.'并獲得一個元組,例如('http://link1', 'rev'). 由于您希望擴展成為第一個標準,因此使用切片[::-1]來反轉元組的順序:
new_links = sorted(links, key=lambda x: x.rsplit('.', maxsplit=1)[::-1])
請注意,rsplit('.', maxsplit=1)在最后一個上使用拆分'.'有點小技巧。如果檔案名包含雙擴展名,例如'.tar.gz',則只有最后一個擴展名將被隔離。
最后一點要考慮:字串中的數字。只要您的字串僅包含單個數字,例如'1'or '2',那么對字串進行排序就會按您的預期進行。但是,如果您在其中有'link10'某個地方,則該順序可能不是您所期望的:按字典順序,'link10'在 之前'link2',因為 的第一個字符'10'是'1'。在這種情況下,我建議您參考這個相關問題:字串自然排序是否有內置函式?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/437136.html
