按数字值对包含数字的名称列表进行排序

时间:2018-10-18 12:19:24

标签: python sorting

我想对一个列表进行排序,其中包括诸如;

100.avi

10000.avi

10002.avi

1003.avi ....

我需要按数字顺序使用文件进行一些处理。如果我使用sorted,则它并不关心值,它会根据第一个字符,第二个字符等进行排序-字符串排序。

我尝试使用[:-4],但尝试在列表上而不是列表的元素上执行此操作。因为当我有了元素时已经很晚了。有什么办法吗?

预先感谢

2 个答案:

答案 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]))