我有路徑串列,例如:
list = ['abcdef\\02\\01.jpg', 'abcdef\\02\\10.jpg', 'abcdef\\02\\11.jpg',
'abcdef\\02\\02.jpg', 'abcdef\\02\\03.jpg', 'abcdef\\04\\01.jpg', ...]
我想先按“02”排序,然后按“abcdef\02\01.jpg”中的“01”排序
我試過了
list = ['abcdef\\02\\01.jpg', 'abcdef\\02\\10.jpg', 'abcdef\\02\\11.jpg',
'abcdef\\02\\02.jpg', 'abcdef\\02\\03.jpg', 'abcdef\\04\\01.jpg', ...]
def myFunc(e):
print(e)
a = e.split('\\')[-2]
b = e.split('\\')[-1][0:-4]
return int(a b)
list.sort(key=myFunc)
輸出我從上述代碼中得到的內容:
list = ['abcdef\\02\\1.jpg',
... ,
'abcdef\\02\\9.jpg',
'abcdef\\04\\1.jpg',
... ,
'abcdef\\04\\9.jpg',
'abcdef\\02\\10.jpg']
想要的輸出:
list = ['abcdef\\02\\1.jpg',
... ,
'abcdef\\02\\9.jpg',
'abcdef\\02\\10.jpg',
... ,
'abcdef\\02\\17.jpg',
'abcdef\\03\\1.jpg']
它是按ASCII排序的。我如何對它進行數字排序?
uj5u.com熱心網友回復:
你可以像這樣進行排序,
sorted(l, key=lambda x: (int(x.split('\\')[1]), int(x.split('\\')[-1].split('.')[0])))
# Output
['abcdef\\02\\01.jpg',
'abcdef\\02\\02.jpg',
'abcdef\\02\\03.jpg',
'abcdef\\02\\10.jpg',
'abcdef\\02\\11.jpg',
'abcdef\\04\\01.jpg']
字串的格式必須保持不變才能運行上述代碼。
uj5u.com熱心網友回復:
嘗試使用pkg_resources通常用于版本的包進行排序。
代碼:
from pkg_resources import parse_version
sorted(Mylist, key=parse_version)]
輸出:
['abcdef\\02\\01.jpg',
'abcdef\\02\\02.jpg',
'abcdef\\02\\03.jpg',
'abcdef\\02\\10.jpg',
'abcdef\\02\\11.jpg',
'abcdef\\04\\01.jpg']
復雜的輸入輸出:
['abcdef\\02\\03.jpg',
'abcdef\\02\\05.jpg',
'abcdef\\02\\05.2.jpg',
'abcdef\\02\\10.jpg',
'abcdef\\02\\11.jpg',
'abcdef\\03\\heloo.jpg',
'abcdef\\04\\01.jpg']
您的實際輸入:
li = ['arifureta\\03\\2.jpg', 'arifureta\\02\\9.jpg','arifureta\\02\\1.jpg', 'arifureta\\02\\2.jpg', 'arifureta\\02\\20.jpg', 'arifureta\\02\\21.jpg', 'arifureta\\03\\1.jpg', 'arifureta\\02\\10.jpg', 'arifureta\\02\\11.jpg', 'arifureta\\02\\12.jpg']
['arifureta\\02\\1.jpg',
'arifureta\\02\\2.jpg',
'arifureta\\02\\9.jpg',
'arifureta\\02\\10.jpg',
'arifureta\\02\\11.jpg',
'arifureta\\02\\12.jpg',
'arifureta\\02\\20.jpg',
'arifureta\\02\\21.jpg',
'arifureta\\03\\1.jpg',
'arifureta\\03\\2.jpg']
uj5u.com熱心網友回復:
謝謝你們@mkrieger1 @Johnny Mopp 的回答。
代碼:
list = ['abcdef\\02\\01.jpg', 'abcdef\\02\\10.jpg', 'abcdef\\02\\11.jpg',
'abcdef\\02\\02.jpg', 'abcdef\\02\\03.jpg', 'abcdef\\04\\01.jpg', ...]
def myFunc(e):
print(e)
a = e.split('\\')[-2]
b = e.split('\\')[-1][0:-4]
- return int(a b)
return int(a), int(b)
list.sort(key=myFunc)
輸出:
['abcdef\\02\\1.jpg', 'abcdef\\02\\2.jpg', ..., 'abcdef\\02\\9.jpg',
'abcdef\\02\\10.jpg', 'abcdef\\02\\11.jpg', 'abcdef\\02\\12.jpg',
... , 'abcdef\\02\\20.jpg', 'abcdef\\02\\21.jpg', 'abcdef\\03\\1.jpg',
'abcdef\\03\\2.jpg', ...]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514772.html
標籤:Python列表排序
