Python中(sorted)函数详细介绍与实战应用
编辑:本站更新:2024-12-01 05:26:17人气:636
在 Python 编程语言中,`sorted()` 函数是一个内置的高效工具,专门用于对可迭代对象进行排序。它返回一个排好序的新列表,并且原始数据不会被改变(即原地排序)。下面将详细探讨 `sorted()` 的功能、参数使用以及实际应用场景。
**一、基本用法**
# sorted() 基础示例
numbers = [5, 2, 9, 1, 7]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 输出:[1, 2, 5, 7, 9]
strings = ['apple', 'orange', 'banana']
sorted_strings = sorted(strings)
print(sorted_strings) # 输出:['apple', 'banana', 'orange'] (按字典顺序排列字符串)
在此基础上,`sorted()` 还可以处理元组和自定义类型的序列等其他任何实现了比较操作符的对象集合。
**二、关键参数详解**
- **key**: 此参数允许我们指定一个函数来决定如何从元素中提取比较的关键值。
students = [('Bob', 80), ('Alice', 96), ('Charlie', 43)]
graded_students = sorted(students, key=lambda x: x[1])
print(graded_students)
# 输出:[('Charlie', 43), ('Bob', 80), ('Alice', 96)] (按照成绩从小到大)
words = ["hello", "world", "Python"]
length_sorted_words = sorted(words, key=len)
print(length_sorted_words)
# 输出:["hi", "Pytho", "world"] (单词长度由短至长)
- **reverse**: 设置为 True 则会反转输出结果,默认是 False 即升序排序。
mixed_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
descending_mixed_list = sorted(mixed_list, reverse=True)
print(descending_mixed_list)
# 输出:[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1] (降序排列数字)
- **cmp**: 在较早版本的 Python 中存在此参数以支持用户自定义对比方法,在当前主流使用的 Python 3.x 版本已废弃,可通过实现 __lt__ 等魔术方法并结合 key 参数间接完成类似效果。
**三、进阶应用实例**
假设有一个复杂的嵌套结构需要排序:
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
students = [
Student("Tom", 2½),
Student("Jerry", ¾),
Student("Spike", ⅔),
]
# 使用 lambda 表达式配合 operator 模块中的 attrgetter 方法获取属性
from operator import attrgetter
age_sorted_students = sorted(students, key=attrgetter('age'))
for student in age_sorted_students:
print(student.name)
# 输出:
# Jerry
# Spike
# Tom
此外,对于非常大的数据集或者内存受限的情况,《Python》标准库提供了 heapq.nsmallest 和 heapq.nlargest 辅助函数,它们基于堆原理可以在 O(n log k) 时间复杂度内找到前k个最小或最大的项,而无需一次性加载所有内容到内存再调用 sorted 函数。
总结来说,无论是在日常编程任务还是高级数据分析场景下,熟练掌握 Python 内置的 `sorted()` 函数都能极大提高代码效率与灵活性,满足各种不同需求下的排序问题解决方案。
**一、基本用法**
python
# sorted() 基础示例
numbers = [5, 2, 9, 1, 7]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 输出:[1, 2, 5, 7, 9]
strings = ['apple', 'orange', 'banana']
sorted_strings = sorted(strings)
print(sorted_strings) # 输出:['apple', 'banana', 'orange'] (按字典顺序排列字符串)
在此基础上,`sorted()` 还可以处理元组和自定义类型的序列等其他任何实现了比较操作符的对象集合。
**二、关键参数详解**
- **key**: 此参数允许我们指定一个函数来决定如何从元素中提取比较的关键值。
python
students = [('Bob', 80), ('Alice', 96), ('Charlie', 43)]
graded_students = sorted(students, key=lambda x: x[1])
print(graded_students)
# 输出:[('Charlie', 43), ('Bob', 80), ('Alice', 96)] (按照成绩从小到大)
words = ["hello", "world", "Python"]
length_sorted_words = sorted(words, key=len)
print(length_sorted_words)
# 输出:["hi", "Pytho", "world"] (单词长度由短至长)
- **reverse**: 设置为 True 则会反转输出结果,默认是 False 即升序排序。
python
mixed_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
descending_mixed_list = sorted(mixed_list, reverse=True)
print(descending_mixed_list)
# 输出:[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1] (降序排列数字)
- **cmp**: 在较早版本的 Python 中存在此参数以支持用户自定义对比方法,在当前主流使用的 Python 3.x 版本已废弃,可通过实现 __lt__ 等魔术方法并结合 key 参数间接完成类似效果。
**三、进阶应用实例**
假设有一个复杂的嵌套结构需要排序:
python
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
students = [
Student("Tom", 2½),
Student("Jerry", ¾),
Student("Spike", ⅔),
]
# 使用 lambda 表达式配合 operator 模块中的 attrgetter 方法获取属性
from operator import attrgetter
age_sorted_students = sorted(students, key=attrgetter('age'))
for student in age_sorted_students:
print(student.name)
# 输出:
# Jerry
# Spike
# Tom
此外,对于非常大的数据集或者内存受限的情况,《Python》标准库提供了 heapq.nsmallest 和 heapq.nlargest 辅助函数,它们基于堆原理可以在 O(n log k) 时间复杂度内找到前k个最小或最大的项,而无需一次性加载所有内容到内存再调用 sorted 函数。
总结来说,无论是在日常编程任务还是高级数据分析场景下,熟练掌握 Python 内置的 `sorted()` 函数都能极大提高代码效率与灵活性,满足各种不同需求下的排序问题解决方案。
www.php580.com PHP工作室 - 全面的PHP教程、实例、框架与实战资源
PHP学习网是专注于PHP技术学习的一站式在线平台,提供丰富全面的PHP教程、深入浅出的实例解析、主流PHP框架详解及实战应用,并涵盖PHP面试指南、最新资讯和活跃的PHP开发者社区。无论您是初学者还是进阶者,这里都有助于提升您的PHP编程技能。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。