这是我排序的列表:
>> list1.sorted()
>> list1
['tmp-0.gif', 'tmp-1.gif', 'tmp-10.gif', 'tmp-11.gif', 'tmp-12.gif', 'tmp-13.gif', 'tmp-14.gif', 'tmp-15.gif', 'tmp-16.gif', 'tmp-17.gif', 'tmp-18.gif', 'tmp-19.gif', 'tmp-2.gif', 'tmp-20.gif', 'tmp-21.gif', 'tmp-22.gif', 'tmp-23.gif', 'tmp-24.gif', 'tmp-25.gif', 'tmp-26.gif', 'tmp-27.gif', 'tmp-28.gif', 'tmp-29.gif', 'tmp-3.gif', 'tmp-30.gif', 'tmp-31.gif', 'tmp-4.gif', 'tmp-5.gif', 'tmp-6.gif', 'tmp-7.gif', 'tmp-8.gif', 'tmp-9.gif']
我需要这个:
['tmp-0.gif', 'tmp-1.gif', 'tmp-2.gif' ... 'tmp-31.gif']
不
['tmp-0.gif', 'tmp-1.gif', 'tmp-10.gif'...]
Does Python have a built in function for string natural sort?解决问题,但我需要下载方法......以下答案仅使用基本python解决了问题
答案 0 :(得分:2)
执行此操作的一种方法 -
list1.sort(key= lambda x: int(x.split('.')[0].split('-')[1]))
示例 -
>>> lst1 = ['tmp-0.gif', 'tmp-1.gif', 'tmp-10.gif', 'tmp-11.gif', 'tmp-12.gif', 'tmp-13.gif', 'tmp-14.gif', 'tmp-15.gif', 'tmp-16.gif', 'tmp-17.gif', 'tmp-18.gif', 'tmp-19.gif', 'tmp-2.gif', 'tmp-20.gif', 'tmp-21.gif', 'tmp-22.gif', 'tmp-23.gif', 'tmp-24.gif', 'tmp-25.gif', 'tmp-26.gif', 'tmp-27.gif', 'tmp-28.gif', 'tmp-29.gif', 'tmp-3.gif', 'tmp-30.gif', 'tmp-31.gif', 'tmp-4.gif', 'tmp-5.gif', 'tmp-6.gif', 'tmp-7.gif', 'tmp-8.gif', 'tmp-9.gif']
>>> lst1.sort(key= lambda x: int(x.split('.')[0].split('-')[1]))
>>> lst1
['tmp-0.gif', 'tmp-1.gif', 'tmp-2.gif', 'tmp-3.gif', 'tmp-4.gif', 'tmp-5.gif', 'tmp-6.gif', 'tmp-7.gif', 'tmp-8.gif', 'tmp-9.gif', 'tmp-10.gif', 'tmp-11.gif', 'tmp-12.gif', 'tmp-13.gif', 'tmp-14.gif', 'tmp-15.gif', 'tmp-16.gif', 'tmp-17.gif', 'tmp-18.gif', 'tmp-19.gif', 'tmp-20.gif', 'tmp-21.gif', 'tmp-22.gif', 'tmp-23.gif', 'tmp-24.gif', 'tmp-25.gif', 'tmp-26.gif', 'tmp-27.gif', 'tmp-28.gif', 'tmp-29.gif', 'tmp-30.gif', 'tmp-31.gif']