假如存在一个列表:

    lst = [‘1.jpg’, ‘2.jpg’, ‘3.jpg’, ‘10.jpg’, ‘20.jpg’]

    要对文件名进行排序,让其按照数字大小进行显示。在python中有两个常规方法,其一是直接调用list类的成员函数sort进行排序,其二是使用builtin函数进行排序。

    • sort

    针对上述列表,直接调用sort函数,结果如下

    1. lst.sort()
    2. >>> ['1.jpg', '10.jpg', '2.jpg', '20.jpg', '3.jpg']

    可以看出列表是按照字符串的形式进行排序的,与预期不符合,因此要重写compare函数来重定义两个变量的比较方式。此处采用匿名函数lambda来定义比较函数:

    1. lst.sort(key=lambda x:int(x[:-4]), reverse=False)
    2. >>> ['1.jpg', '2.jpg', '3.jpg', '10.jpg', '20.jpg']

    若不采用匿名函数,则可写成以下形式:

    1. def cmp(x):
    2. return int(x[:-4])
    3. lst = ['1.jpg', '2.jpg', '3.jpg', '10.jpg', '20.jpg']
    4. lst.sort(key=cmp, reverse=False)
    5. >>> ['1.jpg', '2.jpg', '3.jpg', '10.jpg', '20.jpg']
    • sorted

    sorted是python自带的函数,同print, sum, dir等使用方式相同,实际使用时key、reverse参数含义都相同

    1. lst = ['1.jpg', '2.jpg', '3.jpg', '10.jpg', '20.jpg']
    2. res = sorted(lst)
    3. # >>> ['1.jpg', '10.jpg', '2.jpg', '20.jpg', '3.jpg']
    4. res = sorted(lst, key=lambda x:int(x[:-4]))
    5. # >>> ['1.jpg', '2.jpg', '3.jpg', '10.jpg', '20.jpg']

    不同点:sort是list的成员函数,是在原列表基础上进行排序,即无返回值。而sorted则需要将待排序的列表输入,然后将排序后的列表作为返回值输出。

    1. def sort(self, *args, **kwargs): # real signature unknown
    2. """ Stable sort *IN PLACE*. """
    3. pass
    4. def sorted(*args, **kwargs): # real signature unknown
    5. """
    6. Return a new list containing all items from the iterable in ascending order.
    7. A custom key function can be supplied to customize the sort order, and the
    8. reverse flag can be set to request the result in descending order.
    9. """
    10. pass