Python中的sorted()函数是干什么的?
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()函数是一个非常方便的排序函数,可以用于多种数据类型的排序,支持自定义排序规则。有了它,我们可以轻松实现排序操作,更加高效地完成编程任务。
