python中的sort()和sorted()函数主要用于按升序或降序对数据进行排序。
sort()函数基本语法
用于列表排序的sort函数的语法如下:
:list.sort(reverse=False, key=None)
用法说明如下:参数reverse:默认为False。如果reverse=True,则数据将按降序排列。参数key: 默认为None。我们可以指定一个用户定义的函数来自定义排序。
我们想对文件夹下的图片进行排列打印,
for dirpath, dirnames, filenames in os.walk(path):
filenames.sort()
for img in filenames:
img = os.path.join(dirpath, img)
print(img)
结果如下,发现排序未1、10、11、12、13、2、3、4,
而我们想得到是1、2、3、4、5、6、7、8、9、10、11、12,
sort( ) 默认行为,把数组中所有的项转化为字符串,然后进行 unicode 编码比较。省略了回调函数,所有的数字都会变为字符串,然后按照字符串的比较大小进行比较,也就是unicode 编码比较,
出现以上的排序结果,因为在 unicode编码中 1 开头的最小,其次是 2,3,4,5 等等;
解决方法
原来是因为 sort() 方法还有回调函数,如果省略了 回调函数,那么就有可能出错,如果要确保排序结果的准确,就要给 sort() 加上参数 ( 升序或者降序)
for dirpath, dirnames, filenames in os.walk(path):
filenames.sort(key=lambda x: int(x.split(".")[0]))
for img in filenames:
img = os.path.join(dirpath, img)
print(img)
[图片上传中...(image.png-dcedfb-1693207217490-0)]
感兴趣的可以在研究一下sorted,
sorted(iterable, key=None, reverse=False) 默认是从小到大