我有一个清单
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']
您可以使用正则表达式:
import re
a = ['d2da1.png','d2da11.png','d2da2.png','d2da111.png','d2da22.png']
a.sort(key=lambda x : int(re.search(r'(\d+)\.', x).group(1)))
print(a)
# ['d2da1.png', 'd2da2.png', 'd2da11.png', 'd2da22.png', 'd2da111.png']