Python中的sorted函数:快速排序列表或其他可迭代对象
发布时间:2023-06-25 13:28:32
Python中的sorted函数是一种快速排序算法,用于对列表或其他可迭代对象进行排序。sorted函数具有简洁、高效和易于使用的特点,它可以应用于各种类型的数据结构,包括数字、字符串、元组、列表和字典等。
sorted函数的基本语法是:sorted(iterable, key=None, reverse=False)。其中,iterable表示要排序的对象,可以是列表、元组、字符串等;key是一个可选参数,用于指定排序关键字,如果不指定,则使用默认的排序方法;reverse也是一个可选参数,用于指定排序的方向,如果为True,则按降序排序,默认为False,即按升序排序。
在Python中,sorted函数的工作原理是采用分治策略,将可迭代对象分成小块,然后对这些小块进行排序,最后再将这些排序后的小块合并成一个有序的列表。具体来说,sorted函数采用的是归并排序算法,其时间复杂度为O(nlogn),效率很高,适用于大规模数据的排序。
下面我们来看一些sorted函数的示例:
1. 对数字列表进行排序,默认升序排序:
>>> nums = [5, 8, 2, 4, 9, 3, 1, 7, 6] >>> sorted(nums) [1, 2, 3, 4, 5, 6, 7, 8, 9]
2. 对字符串列表进行排序,默认升序排序:
>>> words = ['cat', 'dog', 'apple', 'banana', 'carrot'] >>> sorted(words) ['apple', 'banana', 'carrot', 'cat', 'dog']
3. 对元组列表进行排序,按第二个元素升序排序:
>>> tuples = [(23, 45), (7, 10), (54, 21), (11, 8)] >>> sorted(tuples, key=lambda x: x[1]) [(11, 8), (54, 21), (7, 10), (23, 45)]
4. 对字典进行排序,按值降序排序:
>>> d = {'apple': 5, 'banana': 10, 'orange': 3, 'grape': 7}
>>> sorted(d.items(), key=lambda x: x[1], reverse=True)
[('banana', 10), ('grape', 7), ('apple', 5), ('orange', 3)]
5. 对复杂对象进行排序,按对象的属性排序:
class Student:
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
def __repr__(self):
return f'{self.name}({self.age}): {self.score}'
students = [Student('Jack', 18, 89), Student('Tom', 20, 78), Student('Lily', 19, 95), Student('Bob', 18, 81)]
# 按分数升序排序
sorted(students, key=lambda x: x.score)
# 按年龄升序,分数降序排序
sorted(students, key=lambda x: (x.age, -x.score))
注意:sorted函数是一个稳定的排序算法,也就是说相等的元素在排序后的位置不会发生变化。这一点很重要,因为在某些应用中,相等元素的位置必须保持不变。
综上,Python中的sorted函数是一种十分实用的快速排序算法,它可以轻松地对任何可迭代对象进行排序,具有高效、简洁和易于使用的特点。
