我想对一个列表进行排序,其中包括诸如;
100.avi
10000.avi
10002.avi
1003.avi ....
我需要按数字顺序使用文件进行一些处理。如果我使用sorted
,则它并不关心值,它会根据第一个字符,第二个字符等进行排序-字符串排序。
我尝试使用[:-4],但尝试在列表上而不是列表的元素上执行此操作。因为当我有了元素时已经很晚了。有什么办法吗?
预先感谢
答案 0 :(得分:2)
您可以使用自定义sorting function从列表的每个元素中提取数字并将其用作比较键。您需要将其转换为int
,以确保其比较类似于数字:
>>> lst = ['100.avi', '10000.avi', '10002.avi', '1003.avi']
>>> sorted(lst, key=lambda x: int(x.split('.', 1)[0]))
['100.avi', '1003.avi', '10000.avi', '10002.avi']
答案 1 :(得分:0)
由于给定 list 的所有字符串都以.avi
扩展名结尾,因此可以使用 slicing 功能。
sorted(lst, key=lambda x: int(x[:-4]))