簡體   English   中英

對同時包含字母和數字的 Python 列表進行排序

[英]Sort Python list containing both letters and numbers

我有一個列表directory_contents包含:

['文件夾 1'、'文件夾 10'、'文件夾 11'、'文件夾 12'、'文件夾 13'、'文件夾 14'、'文件夾 15'、'文件夾 16'、'文件夾 17'、'文件夾 18' , '文件夾 19', '文件夾 2', '文件夾 20', '文件夾 21', '文件夾 22', '文件夾 23', '文件夾 24', '文件夾 25', '文件夾 26', '文件夾 27' , '文件夾 28', '文件夾 29', '文件夾 3', '文件夾 30', '文件夾 4', '文件夾 5', '文件夾 6', '文件夾 7', '文件夾 8', '文件夾 9' ]

我只需要對其進行排序,使其看起來基本上就像 windows 或任何操作系統會顯示的那樣:

在此處輸入圖像描述

所以它會是:

['文件夾 1'、'文件夾 2'、'文件夾 3'、'文件夾 4' 等等...

我嘗試了directory_contents.sort()directory_contents = sorted(directory_contents)但都沒有工作。

按數字排序:

  directory_contents = ['Folder 1', 'Folder 10', 'Folder 11', 'Folder 12', 'Folder 13', 'Folder 14', 'Folder 15', 'Folder 16', 'Folder 17', 'Folder 18', 'Folder 19', 'Folder 2', 'Folder 20', 'Folder 21', 'Folder 22', 'Folder 23', 'Folder 24', 'Folder 25', 'Folder 26', 'Folder 27', 'Folder 28', 'Folder 29', 'Folder 3', 'Folder 30', 'Folder 4', 'Folder 5', 'Folder 6', 'Folder 7', 'Folder 8', 'Folder 9']
  directory_contents.sort(key=lambda x: int(x.strip('Folder')))

這也有點快:

timeit("""directory_contents = ['Folder 1', 'Folder 10', 'Folder 11', 'Folder 12', 'Folder 13', 'Folder 14', 'Folder 15', 'Folder 16', 'Folder 17', 'Folder 18', 'Folder 19', 'Folder 2', 'Folder 20', 'Folder 21', 'Folder 22', 'Folder 23', 'Folder 24', 'Folder 25', 'Folder 26', 'Folder 27', 'Folder 28', 'Folder 29', 'Folder 3', 'Folder 30', 'Folder 4', 'Folder 5', 'Folder 6', 'Folder 7', 'Folder 8', 'Folder 9']; directory_contents.sort(key=lambda x: int(x.strip('Folder')))""", number=1000)
0.06238140000000669
timeit("""directory_contents = ['Folder 1', 'Folder 10', 'Folder 11', 'Folder 12', 'Folder 13', 'Folder 14', 'Folder 15', 'Folder 16', 'Folder 17', 'Folder 18', 'Folder 19', 'Folder 2', 'Folder 20', 'Folder 21', 'Folder 22', 'Folder 23', 'Folder 24', 'Folder 25', 'Folder 26', 'Folder 27', 'Folder 28', 'Folder 29', 'Folder 3', 'Folder 30', 'Folder 4', 'Folder 5', 'Folder 6', 'Folder 7', 'Folder 8', 'Folder 9']; directory_contents.sort(key=lambda x:int(x.split(' ')[1]))""", number=1000)
0.08448790000001338

只需使用sort()方法並將key參數傳遞給它:-

directory_contents.sort(key=lambda x:int(x.split(' ')[1]))

現在,如果您打印directory_contents ,您將獲得所需的 output

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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