繁体   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