python - 根据字符串中间的任意数字对列表中的字符串进行排序
问题描述
我有一个清单
a = ['d2da1.png','d2da11.png','d2da2.png','d2da111.png','d2da22.png']
我想.
在每个元素中根据句点之前的最后一个数字自动排序。字符串中的这个数字可以是任何长度的任何整数(例如1
, 11
, 2
, 111
, 22
)。寻求的输出是
a = ['d2da1.png','d2da2.png','d2da11.png','d2da22.png','d2da111.png']
传统的方法,例如在sorted
这里失败,如果考虑非常大的列表,暴力破解可能会耗费大量时间。因此,有没有办法根据字符串中的最后一个完整数字对上面的字符串进行排序以输出寻找的列表?
解决方案
如果前缀/后缀保持不变,这是可行的,我认为很清楚:
In [10]: a
Out[10]: ['d2da1.png', 'd2da11.png', 'd2da2.png', 'd2da111.png', 'd2da22.png']
In [11]: def chop(s):
...: return int(s.replace('d2da','').replace('.png',''))
...:
In [12]:
In [12]: [chop(t) for t in a] # a little side-test on chop()
Out[12]: [1, 11, 2, 111, 22]
In [13]: a.sort(key=lambda x: chop(x))
In [14]: a
Out[14]: ['d2da1.png', 'd2da2.png', 'd2da11.png', 'd2da22.png', 'd2da111.png']
推荐阅读
- slack - 获取已邀请机器人的聊天列表
- javascript - How to assign response object to state
- python - virtualenvwrapper.sh 的 Virtualenvwrapper 问题
- node.js - Returning posgreSQL database records with user input
- c# - 找不到 Nlog 或其依赖项之一 - edge-js
- spring-boot - Can we use netflix-eureka as external load balancer
- c# - my grid view does not refresh after sorting
- email - 如何使用颤振发送电子邮件?
- node.js - Routing MQTT protocol to PM2
- c# - Net Core:保存图像 URL 和描述列表的最佳方法