在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中高阶函数与装饰器

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

python高阶函数sorted

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

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

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

Python中高阶函数讲解

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

python中高阶函数学习笔记

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

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

>>> f = lambda x: x * x>>> f at 0x101c6ef28> >&gt ...

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

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

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

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

python高阶函数的使用

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

随机推荐

ORM框架示例及查询测试,上首页修改版(11种框架)

继上次ORM之殇,我们需要什么样的ORM框架? 整理了11个ORM框架测试示例,通过示例代码和结果,能很容易了解各种框架的特性,优缺点,排名不分先后 EF PDF XCODE CRL NHiberna ...

具体解释coredump

一,什么是coredump 我们常常听到大家说到程序core掉了,须要定位解决,这里说的大部分是指相应程序因为各种异常或者bug导致在执行过程中异常退出或者中止,而且在满足一定条件下(这里为什么说须要 ...

windows7 安装python

首先去Python官网,https://www.python.org 找到downloads,我这里系统是win7 x64,下载的是最新版本3.4.2 下载完成后有个msi文件,选择文件安装目录,一路 ...

mysql用户权限分配专栏

00x1创建新用户 通过root用户登录之后创建 创建新用户,用户名为testuser,密码为123456 : 1 grant all privileges on *.* to testuser@lo ...

import this

import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than ...

指定nginx某个目录显示目录结构

1.修改配置文件/usr/local/nginx/conf/nginx.conf 指定目录,开启autoindex为on. location /study { autoindex on; } 2. 保 ...

C++中explicit的用法

...

Entity Framework——读写分离

1 实现 CustomDbContext扩展了DbContext,其构造函数带有形式参nameOrConnectionString,可以在使用CustomDbContext时指定数据库连接字符串. D ...

java得到当前时间

SimpleDateFormat timeformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); java.util.Date ...

UART驱动分析

在linux用户层上要操作底层串口需要对/dev/ttySxxx操作,这里的ttySx指实际的终端串口. 以下以全志A64为实例,分析UART驱动以及浅谈TTY架构. linux-3.10/drive ...