上一篇
Python列表sorted排序完全指南 - 从基础到高级用法
- Python
- 2025-08-13
- 1356
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发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://zhuozi.jltcw.com/20258049.html
发表评论