首页 > 解决方案 > 根据字符串中间的任意数字对列表中的字符串进行排序

问题描述

我有一个清单

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这里失败,如果考虑非常大的列表,暴力破解可能会耗费大量时间。因此,有没有办法根据字符串中的最后一个完整数字对上面的字符串进行排序以输出寻找的列表?

标签: pythonlistsorting

解决方案


如果前缀/后缀保持不变,这是可行的,我认为很清楚:

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']

推荐阅读