为什么调用natsorted不会修改我的列表?

时间:2015-10-10 10:50:44

标签: python natsort

from natsort import natsorted

filelist=[]
filelist=os.listdir("C:\\Users\\Amit\\Downloads\\Compressed\\trainigVid")
natsorted(filelist)
print filelist

我得到以下输出

['1.avi', '10.avi', '11.avi', '12.avi', '13.avi', '14.avi', '15.avi',   '16.avi', '17.avi', '18.avi', '19.avi', '2.avi', '20.avi', '21.avi', '22.avi', '23.avi', '24.avi', '3.avi', '4.avi', '5.avi', '6.avi', '7.avi', '8.avi', '9.avi']

我希望这个列表自然地按照

排序
[1.avi, 2.avi, 3.avi.....]

我被困住了,请帮忙

2 个答案:

答案 0 :(得分:3)

natsorted返回新排序的列表,它不会修改原始列表。这意味着你应该使用:

filelist = natsorted(filelist)

获得该返回值。

答案 1 :(得分:1)

试试这个:

import os

filelist = os.listdir("C:\\Users\\Amit\\Downloads\\Compressed\\trainigVid")
out = []

for s in sorted(filelist, key=lambda x:int(os.path.splitext(x)[0])):
    out.append(s)

print out

<强>演示:

['1.avi', '2.avi', '3.avi', '4.avi', '5.avi', '6.avi', '7.avi', '8.avi', '9.avi', '10.avi', '11.avi', '12.avi', '13.avi', '14.avi', '15.avi', '16.avi', '17.avi', '18.avi', '19.avi', '20.avi', '21.avi', '22.avi', '23.avi', '24.avi']