在Python中,有内置的排序方法:sorted(iterable, key, reverse)。

Sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序。key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。

print(sorted([1,34,-5,55,-100,12]))

直接像上面对数字进行的排序,得到的结果为下面:

[-100, -5, 1, 12, 34, 55]

这是对简单的排序,但是如果按照绝对值进行排序,就可以利用key

print(sorted([1,34,-5,55,-100,12],key=abs))

加上key,按照绝对值进行排序,得到的结果如下所示:

[1, -5, 12, 34, 55, -100]

这是对key的简单利用,当然我们还能够自己定义函数来排序。

def ad(x):
return x*(-1)
print(sorted([1,34,-5,55,-100,12],key=ad))

如上定义了一个函数ad(),这个函数就是取反,按照取反之后的结果进行排序,得到下面的结果:

[55, 34, 12, 1, -5, -100]

这也是对key的简单运用,通过自己定义函数的方法。

sorted()除了对纯数字进行排序以外,还能够对字符串进行排序,按照ASCII的顺序进行排序

print(sorted(['as','xp','junjun','XX','zp','www','+']))
print(sorted(['as','xp','junjun','XX','zp','www','+'],key=str.lower))
print(sorted(['as','xp','junjun','XX','zp','www','+'],key=str.lower,reverse=True))

如上为对字符串进行排序,如下为结果:

['+', 'XX', 'as', 'junjun', 'www', 'xp', 'zp']
['+', 'as', 'junjun', 'www', 'xp', 'XX', 'zp']
['zp', 'XX', 'xp', 'www', 'junjun', 'as', '+']

通过对比,可以发现,先特殊字符,再大写字母,再小写字母。如果加上key=str.lower来排序,所排序出来的字符串不区分大小写。若加上reverse=True,则是按照相反的顺序来排序。

练习:假设我们用一组tuple表示学生名字和成绩:

  L = [('Bob',75),('Adam',92),('Xp',100),('Junjun',1)]

  请用sorted()对上述列表分别按名字和成绩排序:

#按照名字排序
def by_name(t):
return t[0].lower()
#按照成绩排序
def by_score(t):
return t[1] L = [('Bob',75),('Adam',92),('Xp',100),('Junjun',1)]
L2 = sorted(L, key = by_name)
print(L2)
L3 = sorted(L, key = by_score)
print(L3)

上面练习的结果为:

[('Adam', 92), ('Bob', 75), ('Junjun', 1), ('Xp', 100)]
[('Junjun', 1), ('Bob', 75), ('Adam', 92), ('Xp', 100)]

【分析】 
L列表中的每个元素都是一个元组,首先按名字排序,key作用与排序中列表里的每一个元素,所以传入by_name里的参数t是一个元组,需要对元组的第一个元素进行排序,所以是t[0]。所以说他[0]就是元组的第一个字段name,而相应的t[1]就是元组的第二个字段score。

Python中高阶函数sorted()用法的更多相关文章

  1. python中高阶函数与装饰器

    高阶函数的定义:传入参数有函数名或者返回值有内置函数名的函数. 最简单的高阶函数: def add(x, y, f):    return f(x) + f(y) add(-5, 6, abs) 常用 ...

  2. python高阶函数sorted

    原文 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因 ...

  3. python高阶函数——sorted排序算法

    python 内置的sorted()函数可以对一个list进行排序: >>> sorted([8,3,8,11,-2]) [-2, 3, 8, 8, 11] 既然说是高阶函数,那么它 ...

  4. Python中高阶函数讲解

    高阶函数讲解 1. 常规高阶函数 递归函数 格式:def func_name(variable): '''__doc__'''#函数的说明文档 if 条件表达式:#限制递归退出值 pass retur ...

  5. python中高阶函数学习笔记

    什么是高阶函数 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数 def fun(x, y, f): print f(x), f(y) fun ...

  6. python中高阶函数与装饰器(3)

    >>> f = lambda x: x * x>>> f<function <lambda> at 0x101c6ef28> >> ...

  7. python中高阶函数与装饰器(2)

    函数返回值为内置函数名: def sum(*args):    def sum_in():        ax = 0        for n in args:            ax = ax ...

  8. Python 内置函数sorted()在高级用法

    对于Python内置函数sorted(),先拿来跟list(列表)中的成员函数list.sort()进行下对比.在本质上,list的排序和内建函数sorted的排序是差不多的,连参数都基本上是一样的. ...

  9. python高阶函数的使用

    目录 python高阶函数的使用 1.map 2.reduce 3.filter 4.sorted 5.小结 python高阶函数的使用 1.map Python内建了map()函数,map()函数接 ...

随机推荐

  1. 认识Java(2)

    注释 对程序的一段文字描述 可方便其他用户的阅读,增加代码的可读性.可以注销掉代码,等需要的时候再用. 编译器会自动忽视被注释的内容. 分类: 单行注释 // 多行注释 /* */ 文档注释/** * ...

  2. h5开发安卓软键盘遮挡解决方案

    //处理input focus时被键盘遮挡问题 inputFocus:function(){ if(/Android [4-6]/.test(navigator.appVersion)) { wind ...

  3. git分支小问题

    参考网址:http://hbiao68.iteye.com/blog/2055493 1.查看分支 git branch 或者 git branch -v 2.创建一个新的分支 git branch ...

  4. Java数据持久层框架 MyBatis之API学习十(Logging详解)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  5. vuejs axios安装配置与使用

    1.安装服务 npm install --save axios vue-axios 2.在main.js import axios from 'axios' import VueAxios from ...

  6. Steeze框架之入门使用

    一.介绍 steeze是一个优雅.简洁而又高效的PHP开源框架,在整合了知名框架ThinkPHP和Laravel优点的同时,重写了底层架构,增强了功能实现.支持swoole模型运行,支持容器.模型.依 ...

  7. linux_NFS

    NFS是什么? 网络文件系统,又叫共享存储,通过网络连接让不同主机之间实现共享存储. 应用于存放图片.附件.视频等用户上传文件 相关同类应用:大型网站nfs有压力,使用moosefs(mfs),Ghu ...

  8. linux_快照和克隆

    什么是快照? 操作虚拟机时候,想保存当前状态为以后操作失误快速那时保存的系统状态,想当于对系统的版本管理,每个节点之间可以互相切换 什么是克隆? 可以选择快照和当前状态,可选择链接克隆和完整克隆 链接 ...

  9. SQL Server——存储过程

    我想从下面几个方面大概的讲述下存储过程,可能有些知识点是你没有注意的,也可能有些知识点我不知道,欢迎大家指点指点.如有不足,欢迎指教! 存储过程概念 存储过程优点 存储过程的接口 存储过程的解析.编译 ...

  10. Bilibili/DanmakuFlameMaster: Android开源弹幕引擎·烈焰弹幕使 ~ JNI source:Bilibili/NativeBitmapFactory

    https://github.com/Bilibili/DanmakuFlameMaster