[英]How to sort list by the numbers in a string?
我有一個包含這樣數字的字符串列表:
['line_1.jpg Word930\n', 'line_10.jpg Word203\n', 'line_2.jpg Word31\n', 'line_100.jpg Word7\n', 'line_3.jpg Word60\n', 'line_4.jpg Word52\n']
我想將字符串中的數字在每個字符串中的空格之前從小到大排序,我想要這個結果:
['line_1.jpg Word930\n', 'line_2.jpg Word31\n', 'line_3.jpg Word60\n',
'line_4.jpg Word52\n', 'line_10.jpg Word203\n', 'line_100.jpg Word7\n']
我使用此代碼對列表進行排序:
myList=['line_1.jpg Word930\n', 'line_10.jpg Word203\n', 'line_2.jpg Word31\n', 'line_100.jpg Word7\n', 'line_3.jpg Word60\n', 'line_4.jpg Word52\n']
myList.sort()
print(myList)
但結果是:
['line_1.jpg Word930\n', 'line_10.jpg Word203\n', 'line_100.jpg Word7\n', 'line_2.jpg Word31\n', 'line_3.jpg Word60\n', 'line_4.jpg Word52\n']
這是不對的,如何修復代碼?
您可以使用re
來獲取值並在list.sort
的 keyfunction 中使用它,例如,
>>> import re
>>> x
['line_1.jpg Word930\n', 'line_10.jpg Word203\n', 'line_2.jpg Word31\n', 'line_100.jpg Word7\n', 'line_3.jpg Word60\n', 'line_4.jpg Word52\n']
>>> x.sort(key=lambda x: int(re.search(r'line_(\d+).*', x).group(1)))
>>> x
['line_1.jpg Word930\n', 'line_2.jpg Word31\n', 'line_3.jpg Word60\n', 'line_4.jpg Word52\n', 'line_10.jpg Word203\n', 'line_100.jpg Word7\n']
>>>
您可以像這樣對列表進行排序
myList.sort(key=lambda x: int(x[x.find("_")+ 1:x.find(".")]))
這將根據文件的編號對列表進行排序。
我們可以將字符串拆分為"."
要獲取文件名,請在"_"
上再次拆分,然后從最后一項中獲取數字並轉換為 integer。 然后我們可以將它傳遞給sorted()
的鍵 function 。
lst = ['line_1.jpg Word930\n', 'line_2.jpg Word31\n', 'line_3.jpg Word60\n', 'line_4.jpg Word52\n', 'line_10.jpg Word203\n', 'line_100.jpg Word7\n']
print(sorted(lst, key=lambda x: int(x.split(".")[0].split("_")[-1])))
# ['line_1.jpg Word930\n', 'line_2.jpg Word31\n', 'line_3.jpg Word60\n', 'line_4.jpg Word52\n', 'line_10.jpg Word203\n', 'line_100.jpg Word7\n']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.