我有一个带有文件名的字符串列表:
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']
有一种简单的方法吗?
答案 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)