簡體   English   中英

如何按字符串中的數字對列表進行排序?

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

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