假如存在一个列表:
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*. """
pass
def 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 the
reverse flag can be set to request the result in descending order.
"""
pass