假如存在一个列表:
lst = [‘1.jpg’, ‘2.jpg’, ‘3.jpg’, ‘10.jpg’, ‘20.jpg’]
要对文件名进行排序,让其按照数字大小进行显示。在python中有两个常规方法,其一是直接调用list类的成员函数sort进行排序,其二是使用builtin函数进行排序。
- sort
针对上述列表,直接调用sort函数,结果如下
lst.sort()>>> ['1.jpg', '10.jpg', '2.jpg', '20.jpg', '3.jpg']
可以看出列表是按照字符串的形式进行排序的,与预期不符合,因此要重写compare函数来重定义两个变量的比较方式。此处采用匿名函数lambda来定义比较函数:
lst.sort(key=lambda x:int(x[:-4]), reverse=False)>>> ['1.jpg', '2.jpg', '3.jpg', '10.jpg', '20.jpg']
若不采用匿名函数,则可写成以下形式:
def cmp(x):return int(x[:-4])lst = ['1.jpg', '2.jpg', '3.jpg', '10.jpg', '20.jpg']lst.sort(key=cmp, reverse=False)>>> ['1.jpg', '2.jpg', '3.jpg', '10.jpg', '20.jpg']
- sorted
sorted是python自带的函数,同print, sum, dir等使用方式相同,实际使用时key、reverse参数含义都相同
lst = ['1.jpg', '2.jpg', '3.jpg', '10.jpg', '20.jpg']res = sorted(lst)# >>> ['1.jpg', '10.jpg', '2.jpg', '20.jpg', '3.jpg']res = sorted(lst, key=lambda x:int(x[:-4]))# >>> ['1.jpg', '2.jpg', '3.jpg', '10.jpg', '20.jpg']
不同点:sort是list的成员函数,是在原列表基础上进行排序,即无返回值。而sorted则需要将待排序的列表输入,然后将排序后的列表作为返回值输出。
def sort(self, *args, **kwargs): # real signature unknown""" Stable sort *IN PLACE*. """passdef sorted(*args, **kwargs): # real signature unknown"""Return a new list containing all items from the iterable in ascending order.A custom key function can be supplied to customize the sort order, and thereverse flag can be set to request the result in descending order."""pass
