大家好,我是Python之眼。
今天给大家带来一篇干货!
熟悉编程的朋友应该不难理解,为什么字符串排序"10"会排在"2"的前面。因为字符串大小比较是对各字符的编码值逐个进行比较,"1"<"2",所以"10"<"2"。
不过这不是本文想要达到的目标,本篇文章会用一行代码,让文本中出现的(任意多组)数字序号可以按照数字顺序进行排序。
目录:
- 〇、背景
- 一、正则取出序号位置进行排序
- 二、微软的排序策略
- 三、Python实现排序
- 四、一行代码排序
〇、背景
最近在爬虫某漫画网站,帖子标题一般是这样的格式:
[作者] 标题标题 1 [55P] [作者] 标题标题 2 [64P] [作者] 标题标题 3 [75P] …… [作者] 标题标题 8 [47P] [作者] 标题标题 9 [44P] [作者] 标题标题 10 [50P] [作者] 标题标题 11 [44P] [作者] 标题标题 12 [43P] [作者] 标题标题 13 [44P] ……
我按照每篇帖子的标题作为文件夹名,将帖子里的所有图片下载到了对应的目录。
本地保存的结果是这样的:
在资源管理器中,这些数字顺序的文件夹都得到了“正确的”排序。
但是因为项目需求,我希望在程序中处理这些文件夹时,却出现了文章一开头出现的问题——10、11、12全都跑到了1的后面、2的前面,这是不符合我的预期的。
[作者] 标题标题 1 [55P] [作者] 标题标题 10 [50P] [作者] 标题标题 11 [44P] [作者] 标题标题 12 [43P] …… [作者] 标题标题 19 [36P] [作者] 标题标题 2 [64P] [作者] 标题标题 20 [33P] [作者] 标题标题 21 [36P] [作者] 标题标题 22 [33P] [作者] 标题标题 23 [35P] ……
一、正则取出序号位置进行排序
如果文章的序号始终出现在同样的位置,那么用正则很容易将这个位置的序号“取出来”,转换为数字类型,然后利用sorted函数的第2个参数key进行排序即可。
比如本例可以用这样的代码进行排序: