按数字排序字符串列表

时间:2018-10-10 10:01:02

标签: python

我有一个带有文件名的字符串列表:

flist = ['0.png','10.png', '3.png', '4.png', '100.png']
flist.sort()
print(flist)

输出:

['0.png', '10.png', '100.png', '3.png', '4.png']

但是我想要

['0.png', '3.png', '4.png', '10.png', '100.png']

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:5)

是:

flist.sort(key=lambda fname: int(fname.split('.')[0]))

说明:字符串按词法排序,因此"10""3"之前(因为"1" <"3",因此第一个字符串在"1"之后的内容是忽略)。因此,我们使用list.sort()的{​​{1}}参数,它是一个回调函数,该函数接受一个列表项并返回用于订购该项的值-在您的情况下,是从第一部分开始构建的整数文件名。这样,列表就可以正确地按数值排序。

答案 1 :(得分:1)

您也可以这样:

flist = ['0.png','10.png', '3.png', '4.png', '100.png']
flist.sort(key=lambda x: '{0:0>8}'.format(x))
print(flist)