Python排序利器:深入理解sorted()函数

在Python中,sorted()函数是一个非常有用的内置函数,用于对可迭代对象进行排序。下面是对sorted()函数的全面解析,包括其用法、参数、返回值和实际应用示例。

用法

sorted()函数的基本用法非常简单。它接受一个可迭代对象作为参数,并返回一个新的排序后的列表。平均情况时间复杂度:O(n log n)。

sorted_list = sorted(iterable, key, reverse)        # 默认升序    

参数

  1. iterable:任何可迭代对象,如列表、元组、字符串等。
  2. key:一个函数,用于从每个元素中提取一个用于比较的值。如果不提供或者为None,则比较元素本身。
  3. reverse:如果为True,则列表元素将被降序排列,默认为False

返回值

sorted()函数返回一个已经排好序的新列表。

基本应用示例

1. 基本排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers = sorted(numbers)        # 默认升序
print(sorted_numbers)        # 输出: [1, 1, 2, 3, 4, 5, 6, 9]
2. 字符串列表排序
words = ["banana", "apple", "cherry"]
sorted_words = sorted(words)        # 按照字符串列表每个元素的首字母升序排序
print(sorted_words)        # 输出: ['apple', 'banana', 'cherry']
3. 使用key参数排序
  • 使用lambda表达式
numbers = [4, 1, 3, 2]
sorted_numbers = sorted(numbers, key=lambda x: -x)  # 降序排序
print(sorted_numbers)        # 输出:[4, 3, 2, 1]

这句代码是 sorted() 函数中的 key 参数的一个常见用法。让我们逐步分析这个 lambda 表达式:

  1. key:这是 sorted() 函数中的一个参数,它接受一个函数,这个函数定义了排序的依据。key 函数的返回值将用于比较元素,从而决定元素在排序后的列表中的位置。

  2. lambda:这是 Python 中的一个关键字,用于创建匿名函数(即没有显式名称的函数)。lambda 表达式通常用于需要一个函数对象的地方,但又不想(或不需要)使用完整的 def 语句定义一个函数。

  3. x:这是 lambda 表达式中的参数,代表 sorted() 函数处理的可迭代对象numbers中的单个元素。在排序过程中,x 会依次取遍历整个可迭代对象的所有元素。

  4. ::这个冒号是 lambda 表达式的结束标志,它后面的部分是表达式的主体。

  5. -x:这是 lambda 表达式的主体,表示对输入参数 x 进行取反操作。如果 x 是一个数字,-x 就是它的负值。

综合来看,key=lambda x: -x 这个表达式的意思是:对于 sorted() 函数处理的可迭代对象中的每个元素 x,使用其相反数 -x 作为排序的依据。因为 sorted() 函数默认是升序排序,所以当我们使用 -key 函数时,实际上是告诉 sorted() 函数根据元素的相反数进行降序排序。

例如,对于列表 [3, 1, 4, 2],如果我们使用 sorted() 函数并传入 key=lambda x: -x,排序过程将会基于 -x 的值,即 [-3, -1, -4, -2],这将导致最终的排序结果为降序排列的 [4, 3, 2, 1]

  • 使用内置函数名

key用于接受一个函数,这个函数定义了排序的依据。因此除了lambda表达式,还可以直接使用 Python 的内置函数的函数名作为 key。例如,len() 函数常用于根据字符串长度或列表大小进行排序。

words = ["banana", "apple", "cherry"]
sorted_words_by_length = sorted(words, key=len)        # 根据字符串长度排序
print(sorted_words_by_length)        # 输出: ['apple', 'banana', 'cherry']
4. 降序排序

reverse如果为True,则列表元素将被降序排列,默认为False

numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers_desc = sorted(numbers, reverse=True)        # 降序排序
print(sorted_numbers_desc)  # 输出: [9, 6, 5, 4, 3, 2, 1, 1]
5. 复杂数据排序
data = [
    {'name': 'Alice', 'age': 34},
    {'name': 'Bob', 'age': 41},
    {'name': 'Charlie', 'age': 28},
    {'name': 'David', 'age': 19}
]
sorted_data_by_age = sorted(data, key=lambda x: x['age'])        # 根据字典中age的值排序
print(sorted_data_by_age)  # 输出排序后的列表,按年龄升序排列

  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值