上一篇
Python列表sorted排序完全指南 - 从基础到高级用法
- Python
- 2025-08-13
- 1538
Python列表sorted()排序完全指南
掌握sorted()函数的各种用法,从基本排序到高级自定义排序
sorted()函数基础
Python内置的sorted()函数是列表排序的核心工具,它会返回一个新的已排序列表,而不改变原始列表。
基本语法
sorted(iterable, key=None, reverse=False)
- iterable - 要排序的可迭代对象(列表、元组等)
- key - 可选参数,指定排序依据的函数
- reverse - 可选参数,为True时降序排序,默认为False(升序)
基础排序示例
数字排序
numbers = [5, 2, 9, 1, 7] sorted_numbers = sorted(numbers) print(sorted_numbers) # 输出: [1, 2, 5, 7, 9]
字符串排序
fruits = ['apple', 'Banana', 'cherry', 'date'] sorted_fruits = sorted(fruits) print(sorted_fruits) # 输出: ['Banana', 'apple', 'cherry', 'date']
使用key参数自定义排序
key参数是sorted()函数最强大的功能,它允许你指定一个函数来自定义排序逻辑。
常见key函数用法
按字符串长度排序
words = ['apple', 'kiwi', 'banana', 'fig'] sorted_by_length = sorted(words, key=len) print(sorted_by_length) # 输出: ['fig', 'kiwi', 'apple', 'banana']
忽略大小写排序
fruits = ['apple', 'Banana', 'cherry', 'Date'] sorted_ignore_case = sorted(fruits, key=str.lower) print(sorted_ignore_case) # 输出: ['apple', 'Banana', 'cherry', 'Date']
复杂数据结构排序
按字典值排序
students = [
{'name': 'Alice', 'grade': 92},
{'name': 'Bob', 'grade': 87},
{'name': 'Charlie', 'grade': 95}
]
# 按成绩降序排序
sorted_students = sorted(students, key=lambda x: x['grade'], reverse=True)
for student in sorted_students:
print(f"{student['name']}: {student['grade']}")
# 输出:
# Charlie: 95
# Alice: 92
# Bob: 87
高级排序技巧
多级排序
当需要按多个条件排序时,可以通过返回元组的方式实现多级排序。
# 员工数据:部门、姓名、薪资
employees = [
('HR', 'Alice', 65000),
('IT', 'Bob', 85000),
('HR', 'Charlie', 72000),
('IT', 'David', 80000),
('Finance', 'Eva', 90000)
]
# 先按部门升序,再按薪资降序
sorted_employees = sorted(employees, key=lambda x: (x[0], -x[2]))
for emp in sorted_employees:
print(f"{emp[0]:<8} {emp[1]:<10} ${emp[2]}")
# 输出:
# Finance Eva $90000
# HR Charlie $72000
# HR Alice $65000
# IT Bob $85000
# IT David $80000
自定义排序顺序
使用字典映射创建自定义排序顺序。
# 自定义优先级:High > Medium > Low
priority_order = {'High': 0, 'Medium': 1, 'Low': 2}
tasks = [
{'id': 1, 'priority': 'Medium'},
{'id': 2, 'priority': 'High'},
{'id': 3, 'priority': 'Low'},
{'id': 4, 'priority': 'High'}
]
sorted_tasks = sorted(tasks, key=lambda x: priority_order[x['priority']])
for task in sorted_tasks:
print(f"Task {task['id']}: {task['priority']}")
# 输出:
# Task 2: High
# Task 4: High
# Task 1: Medium
# Task 3: Low
sorted() vs sort()
理解Python中两种排序方式的区别:
| 特性 | sorted() | list.sort() |
|---|---|---|
| 返回新列表 | 是 | 否(原地排序) |
| 原始列表 | 不变 | 修改 |
| 支持的数据类型 | 所有可迭代对象 | 仅列表 |
| 使用场景 | 需要保留原始数据时 | 不需要原始数据时 |
# sorted() 示例 - 创建新列表
original = [3, 1, 4, 2]
new_sorted = sorted(original)
print("Original:", original) # [3, 1, 4, 2]
print("Sorted:", new_sorted) # [1, 2, 3, 4]
# sort() 示例 - 原地排序
original.sort()
print("After sort():", original) # [1, 2, 3, 4]
排序算法与性能
Python的sorted()函数使用Timsort算法,这是一种混合排序算法,结合了归并排序和插入排序的优点。
Timsort关键特性:
- 稳定排序(相等元素的顺序保持不变)
- 时间复杂度:最好情况O(n),平均和最坏情况O(n log n)
- 空间复杂度:O(n)
- 特别适合处理部分有序的数据集
- 在实际应用中表现优异,被Java、Android和Swift等平台采用
性能优化提示
- 对于小型列表(n<100),插入排序部分效率很高
- 使用key函数时,尽量选择高效的计算方式
- 避免在key函数中执行复杂操作(如数据库查询)
- 当需要多次排序时,考虑使用Schwartzian变换(装饰-排序-去装饰)
掌握Python排序,提升编程效率
sorted()函数是Python中最常用的内置函数之一,灵活运用key参数可以解决各种复杂排序需求。
高效
灵活
强大
本文由YuLe于2025-08-13发表在吾爱品聚,如有疑问,请联系我们。
本文链接:http://521pj.cn/20258049.html
发表评论