Python 中的排序工具:sort 与 sorted 详解

本文详细介绍了Python中的排序工具sort和sorted,包括两者的基本用法、key参数、operator模块函数、升序降序排序、排序稳定性以及老式DSU方法和cmp参数的使用。示例代码展示了如何进行多级排序和自定义比较函数。
摘要由CSDN通过智能技术生成

Python 中的排序工具:sort 与 sorted 详解

转载请注明出处:https://blog.csdn.net/jpch89/article/details/84324272



0. 参考资料


1. 排序基础

Python 中提供了两种排序工具:

  • list.sort() 方法,它会修改原列表。
  • sorted() 内置函数,从可迭代对象生成一个新的排序后的列表。

最基本的升序排序很简单:

  • 调用 sorted() 函数,返回一个排序过的列表,不修改原列表
>>> old_list = [1, 4, 5, 3, 2, 8, 7]
>>> new_list = sorted(old_list)
>>> new_list
[1, 2, 3, 4, 5, 7, 8]
>>> old_list  # 不改变原列表
[1, 4, 5, 3, 2, 8, 7]
  • 也可以用 list.sort() 方法,它会修改原列表,返回 None。通常它没有 sorted() 方便,但是如果不需要原列表的话,它更高效些。
>>> old_list
[1, 4, 5, 3, 2, 8, 7]
>>> old_list.sort()
>>> old_list
[1, 2, 3, 4, 5, 7, 8]

注意
由于 list.sort() 方法返回的是 None,所以如果错误地写出 old_list = old_list.sort() 这样的代码,就会丢失 old_list 的所有数据。

  • 还有一个区别是,list.sort() 方法只有列表可以使用,而 sorted() 函数可以作用于任何可迭代对象
>>> sorted({
   1: 'D', 4: 'B', 2: 'C', 3: 'E', 5: 'A'})
[1, 2, 3, 4, 5]

2. key 参数

list.sort()sorted() 都有一个 key 参数,它接收一个函数 function,比较之前会对每个元素调用一次。
比如下面是忽略大小写的字符串比较。

  • 使用 sorted() 函数:
>>> sorted("This is a test string from Andrew".split(), key=str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
  • 使用 list.str() 方法:
>>> strings = "This is a test string from Andrew".split()
>>> strings.sort(key=str.lower)
>>> print(strings)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

key 参数的值应该是一个函数,这个函数接收一个参数,返回一个用于排序的键。
key 函数对每一个元素调用一次。

def key_func(x):
    print('我被调用了')
    return x.lower()

strings = "This is a test string from Andrew".split()
strings.sort(key=key_func)
print(strings)

"""
我被调用了
我被调用了
我被调用了
我被调用了
我被调用了
我被调用了
我被调用了
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
"""

比较常见的一个应用场景是取对象的某个索引作为键。

student_tuples 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值