在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. 如何判断NSDictionary是否包含某个键

    方法一: if([[dictionary allKeys] containsObject:key){     // contains key} 方法二: if([dictionary objectFo ...

  2. 为什么alertView弹出后button会消失的问题

    按option后会有提示:Do not use the label object to set the text color or the shadow color. Instead, use the ...

  3. ABB中断设定

    简介: 中断是程序定义事件,通过中断编号识别.中断发生在中断条件为真时.中断不同于其他错误,前者与特定消息号位置无直接关系(不同步).中断会导致正常程序执行过程暂停,跳过控制,进入软中断程序. 即使机 ...

  4. EL表达式遍历Map集合

    <% Map<String,String> map2 = new HashMap(); map2.put("a","hello world") ...

  5. 单KEY业务,数据库水平切分架构实践

    本文将以"用户中心"为例,介绍"单KEY"类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践: 如何来实施水平切分 水平切分后常见的 ...

  6. git 快速入门

    介绍git的基本知识.文件状态.工作区域以及一个简单的操作示例. 目录 1. git相关介绍 2. 文件状态与工作区域 3. 快速使用 1. git相关介绍 1.1 git.github.gitlab ...

  7. Universe Design Tool Using JDBC connect Sybase/Oracle Get Error

    一.针对Sybase 1 使用SAP Universe 设计工具连接Sybase数据库报错,报错如下: “CS: Java Class not found in classpath : com.syb ...

  8. 腾讯工程师教你玩转 RocksDB

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯云数据库内核团队 原文标题:[腾讯云CDB]教你玩转MyRocks/RocksDB-STATISTICS与后台线程篇 0. Intro ...

  9. [Java 教程 01] Hello,Java!

    前言 从事编程已经有一段时间了,突然发现,Java作为我的第一编程语言,自己似乎对她并有一个系统的思想.当下Java依旧保持着超高的热度,新特性也不断出现,从当初学习的java6版本到最近刚出的jav ...

  10. JMeter打开jmx文件报错解决方法

    错误提示: Error Problem loading XMLfrom:'D:\software\apace-jmeter-3.3\bin\线程组jmx', missing class com.tho ...