Myself
  • 1.Python历史
  • 2.安装Python
    • 2.1.Python解释器
  • 3.第一个Python程序
    • 3.1.使用文本编辑器
    • 3.2.输入和输出
  • 4.Python基础
    • 4.1.数据类型和变量
    • 4.2.字符串和编码
    • 4.3.使用list和tuple
    • 4.4.条件判断
    • 4.5.模式匹配
    • 4.6.循环
    • 4.7.使用dict和set
  • 5.函数
    • 5.1.调用函数
    • 5.2.定义函数
    • 5.3.函数的参数
    • 5.4.递归函数
  • 6.高级特性
    • 6.1.切片
    • 6.2.迭代
    • 6.3.列表生成式
    • 6.4.生成器
    • 6.5.迭代器
  • 7.函数式编程
    • 7.1.高阶函数
      • 7.1.1.map/reduce
      • 7.1.2.filter
      • 7.1.3.sorted
    • 7.2.返回函数
    • 7.3.匿名函数
    • 7.4.装饰器
    • 7.5.偏函数
  • 8.模块
    • 8.1.使用模块
    • 8.2.安装第三方模块

搜索结果

没有相关内容~~

7.1.3.sorted

最新修改于 2025-08-07 17:02
排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。 Python内置的 `sorted()`函数就可以对list进行排序: ```plain >>> sorted([36, 5, -12, 9, -21]) [-21, -12, 5, 9, 36] ``` []( "复制到剪贴板") 此外,`sorted()`函数也是一个高阶函数,它还可以接收一个 `key`函数来实现自定义的排序,例如按绝对值大小排序: ```plain >>> sorted([36, 5, -12, 9, -21], key=abs) [5, 9, -12, -21, 36] ``` []( "复制到剪贴板") key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。对比原始的list和经过 `key=abs`处理过的list: ```python list = [36, 5, -12, 9, -21] keys = [36, 5, 12, 9, 21] ``` []( "复制到剪贴板") 然后 `sorted()`函数按照keys进行排序,并按照对应关系返回list相应的元素: ``` keys sort => [5, 9, 12, 21, 36] | | | | | result sort => [5, 9, -12, -21, 36] ``` 我们再看一个字符串排序的例子: ```plain >>> sorted(['bob', 'about', 'Zoo', 'Credit']) ['Credit', 'Zoo', 'about', 'bob'] ``` []( "复制到剪贴板") 默认情况下,对字符串排序,是按照ASCII的大小比较的,由于 `'Z' > sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower) ['about', 'bob', 'Credit', 'Zoo'] ``` []( "复制到剪贴板") 要进行反向排序,不必改动key函数,可以传入第三个参数 `reverse=True`: ```plain >>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True) ['Zoo', 'Credit', 'bob', 'about'] ``` []( "复制到剪贴板") 从上述例子可以看出,高阶函数的抽象能力是非常强大的,而且,核心代码可以保持得非常简洁。 ### 小结 `sorted()`也是一个高阶函数。用 `sorted()`排序的关键在于实现一个映射函数。 ### 练习 假设我们用一组tuple表示学生名字和成绩: ```python L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] ``` []( "复制到剪贴板") 请用 `sorted()`对上述列表分别按名字排序: ```python L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] def by_name(t): pass L2 = sorted(L, key=by_name) print(L2) ``` []( "复制到剪贴板") 再按成绩从高到低排序: ```python L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] def by_score(t): pass L2 = sorted(L, key=by_score) print(L2) ```
开始访问