python - 对同时包含字母和数字的 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)
但都没有工作。
解决方案
按数字排序:
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
推荐阅读
- c++ - 为什么编译器无法检测到“noexcept”用法不匹配?
- javascript - 将数组中的多个项目分组到另一个数组中
- intellij-idea - IntelliJ 要求在不同的 Cucumber 步骤之间选择声明
- snowflake-cloud-data-platform - 雪花中的出站特权是什么
- r - 使用 dplyr 过滤邮政编码前缀错误的更快方法
- python - Python(多处理)中的“无法分配内存”异常,但可用内存
- react-native - 在 for 循环中等待分派时代码未执行
- sql - 在 oracle 中列出的硬编码项目
- laravel - Laravel 5 & Vue 组件 – 从 URL 中移除 Public
- git - 如何删除我在 3 天前提交的 github 上的提交而不会丢失以后的数据?