以数字方式对字符串列表进行排序

Art*_*nov 4 python

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

flist = ['0.png','10.png', '3.png', '4.png', '100.png']
flist.sort()
print(flist)
Run Code Online (Sandbox Code Playgroud)

输出:

['0.png', '10.png', '100.png', '3.png', '4.png']
Run Code Online (Sandbox Code Playgroud)

但我想要:

['0.png', '3.png', '4.png', '10.png', '100.png']
Run Code Online (Sandbox Code Playgroud)

有一个简单的方法吗?

bru*_*ers 6

是:

flist.sort(key=lambda fname: int(fname.split('.')[0]))
Run Code Online (Sandbox Code Playgroud)

说明:字符串是词法排序的,所以"10"在之前"3"(因为"1"< "3",所以"1"忽略第一个字符串之后的任何内容).所以我们使用list.sort()key参数是一个回调函数,它接受一个列表项并返回用于该项的排序的值 - 在你的例子中,是一个从文件名的第一部分构建的整数.这样,列表就可以在数值上正确排序.