在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. geotools实现多边形的合并&缓冲区

    这算是第一次接触开源工具包,说实话刚开始有点不知所措,中途遇到很多问题的时候也感觉头皮发麻,不过很高兴自己还是坚持下来了. geotools就不做过多的介绍了,想总结一下如何根据开源内容做自己的项目. ...

  2. 用CSS实现“表格布局”

    当我们进行浮动布局时,会发现存在着非浮动元素与浮动元素的底部难以对齐的情况,这就是浮动布局的缺陷.因此,过去的前端工作者曾利用<table>以实现"表格布局".因为表格 ...

  3. Python 爬取美女图片,分目录多级存储

    最近有个需求:下载https://mm.meiji2.com/网站的图片. 所以简单研究了一下爬虫. 在此整理一下结果,一为自己记录,二给后人一些方向. 爬取结果如图:   整体研究周期 2-3 天, ...

  4. MYSQL DISTINCT Optimization

    在很多情况下,Distinct和order by的组合需要建立一个内存临时表.  因为distinct关键字可能利用group by,所以了解下mysql如何处理group by有帮助. distin ...

  5. Select、Poll、Epoll、 异步IO 介绍

    一.概念相关介绍 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的net ...

  6. Java - 路线图

    java语言基础 基本语法 面向对象思想 mysql数据库基础 jdbc操作 java高级技术 java集合框架 多线程 网络编程 sql深入,索引,sql优化 javaweb servlet jsp ...

  7. JS正则表达式的基础用法

    RegExp(正则表达式)对象 正则表达式是一个描述字符模式的对象,可以处理更复杂的字符串.进行匹配替换. 常用的修饰符: i/m/g 使用方法: [声明方法一: new RegExp(value)] ...

  8. SQL 2005/2008 连接SQL 2000报18456错误

    在看文章前,你先看看下面这两个问题,考考你对MSSMS工具的掌握情况: 1: SQL 2005/2008 能连接 SQL 2000数据库服务器吗? 2: SQL 2000 能连接SQL 2005/20 ...

  9. PHP中文网上的无限极分类

    原文地址:http://www.php.cn/code/3966.html fenlei.php <?php class fenlei { public $db; //构造函数,构造函数没有返回 ...

  10. linux中编译安装Apache、PHP、MySQL(上)

    1.简介 在阿里云买了个云服务器,一直没时间折腾.过了近十天了吧,才有时间好好玩玩这个云服务器.自己是做Web开发的,所以我需要的开发环境是LAMP.之前打算是采用yum安装,不过yum安装apach ...