【python】Python高阶函数--sorted函数的高阶用法解析与应用实战
✨✨ 欢迎大家来到景天科技苑✨✨
🎈🎈 养成好习惯,先赞后看哦~🎈🎈
🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。所属的专栏:python综合应用,基础语法到高阶实战教学
景天的主页:景天科技苑
文章目录
Python中sorted()函数的详细用法教程
sorted()
函数是Python的一个内置函数,用于对可迭代对象(如列表、元组、字典的键等)进行排序,并返回一个新的列表,包含排序后的元素。与列表的.sort()
方法不同,sorted()
函数不会修改原始的可迭代对象,而是返回一个新的列表。
语法
sorted(iterable, *, key=None, reverse=False)
- iterable:需要排序的可迭代对象。
- key(可选):一个函数,用于从每个元素中提取一个用于比较的关键字。默认为
None
,即直接比较元素本身。 - reverse(可选):布尔值,指定排序是升序(
False
)还是降序(True
)。默认为False
。
返回值
返回一个新的列表,包含排序后的元素。
代码案例
示例1:基本用法
numbers = [3, 1, 4, 1, 5, 9, 2]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 输出: [1, 1, 2, 3, 4, 5, 9]
# 注意:原始列表未改变
print(numbers) # 输出: [3, 1, 4, 1, 5, 9, 2]
示例2:降序排序
numbers = [3, 1, 4, 1, 5, 9, 2]
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc) # 输出: [9, 5, 4, 3, 2, 1, 1]
示例3:使用key
参数
假设我们有一个包含元组的列表,并且我们想要根据元组的第二个元素进行排序:
tuples = [(1, 'banana'), (3, 'apple'), (2, 'pear'), (4, 'orange')]
# 根据元组的第二个元素(即字符串)进行排序
sorted_tuples = sorted(tuples, key=lambda x: x[1])
print(sorted_tuples) # 输出: [(3, 'apple'), (1, 'banana'), (2, 'pear'), (4, 'orange')]
示例4:对字典的键进行排序
虽然sorted()
函数不能直接对字典进行排序,但我们可以使用它来排序字典的键或值(或键值对)。
my_dict = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
# 对字典的键进行排序
sorted_keys = sorted(my_dict.keys())
print(sorted_keys) # 输出: ['apple', 'banana', 'orange', 'pear']
# 对字典的值进行排序
sorted_values = sorted(my_dict.values())
print(sorted_values) # 输出: [1, 2, 3, 4]
# 对字典的键值对按键排序
sorted_items_by_key = sorted(my_dict.items(), key=lambda item: item[0])
print(sorted_items_by_key) # 输出: [('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]
# 对字典的键值对按值排序
sorted_items_by_value = sorted(my_dict.items(), key=lambda item: item[1])
print(sorted_items_by_value) # 输出: [('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)]
示例5:对复杂对象列表进行排序
假设我们有一个包含自定义对象的列表,并且我们想要根据对象的某个属性进行排序。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"{self.name}: {self.age}"
people = [Person('Alice', 30), Person('Bob', 25), Person('Charlie', 35)]
# 根据年龄对Person对象列表进行排序
sorted_people = sorted(people, key=lambda person: person.age)
print(sorted_people) # 输出类似于: [Bob: 25, Alice: 30, Charlie: 35]
注意:这里使用了lambda
函数作为key
参数的值,以便从Person
对象中提取age
属性作为排序的依据。
进阶用法
示例6:使用attrgetter
进行排序
对于更复杂或性能敏感的应用,可以使用operator.attrgetter
来替代lambda
函数,因为它在某些情况下可以提供更快的排序速度。
from operator import attrgetter
# 假设Person类已经定义如上
people = [Person('Alice', 30), Person('Bob', 25), Person('Charlie', 35)]
# 使用attrgetter根据age属性排序
sorted_people_attrgetter = sorted(people, key=attrgetter('age'))
print(sorted_people_attrgetter) # 输出类似于: [Bob: 25, Alice: 30, Charlie: 35]
示例7:稳定排序
Python的sorted()
函数实现是稳定的,这意味着当两个元素比较相等时,它们在排序后的列表中的相对位置会保持不变。这对于一些需要保持元素间特定顺序的场景非常重要。
data = [('apple', 3), ('banana', 2), ('apple', 1)]
# 由于'apple'在两个元素中相等,且原始顺序是先'3'后'1',排序后'1'仍然跟在'3'后面
sorted_data = sorted(data, key=lambda x: x[0])
print(sorted_data) # 输出: [('apple', 3), ('apple', 1), ('banana', 2)]
# 即使是降序,'apple'的两个元素之间的顺序也保持不变
sorted_data_desc = sorted(data, key=lambda x: x[0], reverse=True)
print(sorted_data_desc) # 输出: [('banana', 2), ('apple', 3), ('apple', 1)]
总结
sorted()
函数是Python中一个非常强大且灵活的工具,能够用于对多种类型的可迭代对象进行排序。通过合理使用key
和reverse
参数,可以实现对复杂数据结构的排序,包括自定义对象、元组列表、字典键/值等。此外,了解sorted()
函数的稳定性也很重要,它有助于在特定情况下保持元素间的相对顺序。
原文地址:https://blog.csdn.net/littlefun591/article/details/140555839
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!