我有一个包含我的文件名的字符串列表:
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)
有一个简单的方法吗?
是:
flist.sort(key=lambda fname: int(fname.split('.')[0]))
Run Code Online (Sandbox Code Playgroud)
说明:字符串是词法排序的,所以"10"在之前"3"(因为"1"< "3",所以"1"忽略第一个字符串之后的任何内容).所以我们使用list.sort()的key参数是一个回调函数,它接受一个列表项并返回用于该项的排序的值 - 在你的例子中,是一个从文件名的第一部分构建的整数.这样,列表就可以在数值上正确排序.