Python的sorted()
函数是一个强大且灵活的内置排序工具,适用于对可迭代对象进行排序。以下是其核心用法及扩展应用的详细解析:
一、基础用法
-
参数说明
-
iterable
:需排序的可迭代对象(如列表、元组、字符串等)。 -
key
(可选):指定一个函数,用于从每个元素中提取排序依据(如key=len
按长度排序)。 -
reverse
(可选):布尔值,True
表示降序排列,False
默认升序。
-
-
示例
# 升序排序 numbers = [5, 2, 8, 1, 9] sorted_numbers = sorted(numbers) print(sorted_numbers) # 输出: [1, 2, 5, 8, 9] # 降序排序 sorted_numbers_desc = sorted(numbers, reverse=True) print(sorted_numbers_desc) # 输出: [9, 8, 5, 2, 1] # 字符串排序(默认按字母顺序) text = "hello" sorted_text = sorted(text) print(sorted_text) # 输出: ['e', 'h', 'l', 'l', 'o']
二、高级功能
-
自定义排序规则
通过
key
参数实现复杂排序逻辑,例如按绝对值排序:num_list = [-3, 5, -2, 8, -1] sorted_by_abs = sorted(num_list, key=abs) print(sorted_by_abs) # 输出: [1, 1, 2, 3, 4, 5, 6, 8]
-
稳定排序
sorted()
是稳定排序算法,相同元素的相对顺序保持不变。 -
不可变性与原对象
sorted()
返回新列表,原对象不变。若需原地排序,使用list.sort()
方法。
三、扩展应用
-
多条件排序
可结合
key
和reverse
实现多条件排序,例如先按年龄排序,再按姓名排序:people = [ {'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 35} ] sorted_people = sorted(people, key=lambda x: (x['age'], x['name']), reverse=True) print(sorted_people) # 输出: [{'name': 'Charlie', 'age': 35}, {'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}]
-
处理复杂数据类型
可对字典、元组等复杂数据类型排序,例如按字典值排序:
scores = {'Alice': 85, 'Bob': 92, 'Charlie': 78} sorted_scores = sorted(scores.items(), key=lambda x: x, reverse=True) print(sorted_scores) # 输出: [('Bob', 92), ('Alice', 85), ('Charlie', 78)]
四、注意事项
-
性能 :
sorted()
的时间复杂度为O(n log n),适用于大规模数据排序。 -
数据类型限制 :可迭代对象需支持比较操作,如数字、字符串等。
通过灵活运用key
和reverse
参数,sorted()
可满足从基础到复杂的排序需求,是Python中不可或缺的函数之一。