首页 > 解决方案 > 对同时包含字母和数字的 Python 列表进行排序

问题描述

我有一个列表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)但都没有工作。

标签: pythonpython-3.xlistsorting

解决方案


按数字排序:

  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

推荐阅读