用一行Python代码实现按字符串内数字大小排列字符串顺序

大家好,我是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进行排序即可。

比如本例可以用这样的代码进行排序:

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值