【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中一个非常强大且灵活的工具,能够用于对多种类型的可迭代对象进行排序。通过合理使用keyreverse参数,可以实现对复杂数据结构的排序,包括自定义对象、元组列表、字典键/值等。此外,了解sorted()函数的稳定性也很重要,它有助于在特定情况下保持元素间的相对顺序。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

景天科技苑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值