Python 的内置函数 sorted() 是一个功能强大的排序工具,用于对可迭代对象进行排序操作。该函数会返回一个新的已排序列表,而不会修改原始输入对象。
基本语法:
sorted(iterable, key=None, reverse=False)
参数说明:
iterable:必需参数,表示要排序的可迭代对象(如列表、元组、字符串等)key:可选参数,指定排序依据的函数(默认为None,即直接比较元素值)reverse:可选布尔参数,控制排序顺序(False为升序,True为降序)
典型用法示例:
# 对列表进行排序
numbers = [3, 1, 4, 1, 5, 9, 2]
print(sorted(numbers)) # 输出:[1, 1, 2, 3, 4, 5, 9]
# 对字符串排序(按ASCII码值)
letters = "python"
print(sorted(letters)) # 输出:['h', 'n', 'o', 'p', 't', 'y']
# 使用key参数进行复杂排序
words = ["apple", "banana", "cherry", "date"]
print(sorted(words, key=len)) # 按单词长度排序
高级应用场景:
- 自定义排序规则:通过
key参数可以实现复杂的排序逻辑
students = [
{"name": "Alice", "grade": 90},
{"name": "Bob", "grade": 85},
{"name": "Charlie", "grade": 95}
]
# 按成绩降序排序
print(sorted(students, key=lambda x: x["grade"], reverse=True))
- 多级排序:可以组合多个条件进行排序
data = [(1, 'b'), (2, 'a'), (1, 'a')]
# 先按元组第一个元素升序,再按第二个元素升序
print(sorted(data, key=lambda x: (x[0], x[1])))
与list.sort()方法的区别:
sorted()适用于所有可迭代对象,而list.sort()是列表的专有方法sorted()返回新列表,原对象不变;list.sort()会原地修改列表sorted()在内存使用上效率略低,因为它需要创建新列表
性能特点:
- 时间复杂度:O(n log n)
- 稳定性:Python的排序是稳定的,即相等元素的相对顺序保持不变
- 实际实现使用Timsort算法(混合了归并排序和插入排序)
注意事项:
- 排序不同类型元素时会引发TypeError
- 对字典使用时默认按键排序
- 可以配合
functools.cmp_to_key使用旧式的比较函数