欢迎访问宙启技术站
智能推送

Python中的sorted()函数是干什么的?

发布时间:2023-06-14 23:03:18

Python中的sorted()函数用于将一个可迭代对象进行排序,返回一个新的排好序的列表,不改变原来的对象。

sorted()函数的语法如下:

sorted(iterable, *, key=None, reverse=False)

其中,iterable为要排序的可迭代对象,key是可选参数,用于指定一个排序函数,reverse也是可选参数,用于指定排序的规则是否为倒序。

一般来说,sorted()函数会对list、tuple、string等序列类型进行排序,也可以对一些自定义对象进行排序,只要这些对象实现了__lt__()方法和__eq__()方法。

sorted()函数内部会根据key指定的排序函数进行排序,如果没有指定,则使用默认的比较函数,对于列表、元组等常规的序列类型会根据元素的大小进行排序,对于字符串类型则按照ASCII码排序。

例如,对一个列表进行排序:

>>> a = [3, 5, 1, 4, 2]

>>> sorted(a)

[1, 2, 3, 4, 5]

可以看到,程序返回一个新的排好序的列表[1, 2, 3, 4, 5],而原列表a并没有改变。

再比如,对一个字典进行排序:

>>> d = {'a': 3, 'b': 1, 'c': 2}

>>> sorted(d.items(), key=lambda x: x[1])

[('b', 1), ('c', 2), ('a', 3)]

可以发现,sorted()函数返回的是一个元组的列表,里面的元组按照字典值从小到大排序。

sorted()函数也可以对一些自定义对象进行排序,只要这些对象实现了__lt__()方法和__eq__()方法。例如,对一个自定义的Student类进行排序:

class Student:

    def __init__(self, name, grade):

        self.name = name

        self.grade = grade

    def __repr__(self):

        return '{}: {}'.format(self.name, self.grade)

    def __lt__(self, other):

        return self.grade < other.grade

    def __eq__(self, other):

        return self.grade == other.grade

 

students = [Student('John', 90), Student('Bob', 80), Student('Alice', 95)]

sorted(students)

[Bob: 80, John: 90, Alice: 95]

可以发现,程序返回的是一个Student对象的列表,按照grade属性从小到大排序。

在使用sorted()函数时,如果需要用到一个定制的排序规则,可以在key参数中指定一个函数来实现。例如,对一个字符串列表按照长度进行排序:

>>> s = ['apple', 'banana', 'watermelon', 'orange']

>>> sorted(s, key=lambda x: len(x))

['apple', 'orange', 'banana', 'watermelon']

可以发现,程序返回的列表按照长度从小到大排序。

最后,如果需要对一个序列类型进行修改排序,可以使用sort()方法,其用法与sorted()函数大致相同,只不过sort()方法会修改原来的对象。

总之,sorted()函数是一个非常方便的排序函数,可以用于多种数据类型的排序,支持自定义排序规则。有了它,我们可以轻松实现排序操作,更加高效地完成编程任务。