参考:sorted

NOTE

1.sorted,快速排序,时间复杂度O(nlogn)渐进最优.

#!/usr/bin/env python3

L = []

for i in range(10):
L.append(int(input())) SortedL = sorted(L) print(SortedL)

上例:sorted函数返回排序好的list。

sh-3.2# ./sorted1.py
-10
2
99
78
24
-100
92
33
12
63
[-100, -10, 2, 12, 24, 33, 63, 78, 92, 99]

2.Python的sorted函数支持传入特定的函数,先将该函数作用于所有的列表元素,再进行排序。注意,该函数是用于比较大小的依据。

absortL = sorted(L, key=abs)

print(absortL)

-10
2
99
78
24
-100
92
33
12
63
[2, -10, 12, 24, 33, 63, 78, 92, 99, -100]

eg.

list = [36, 5, -12, 9, -21]

keys = [36, 5,  12, 9,  21]
keys排序结果 => [5, 9,  12,  21, 36]
| | | | |
最终结果 => [5, 9, -12, -21, 36]

3.默认情况下,对字符串排序,是按照ASCII的大小比较的.

L1 = []

for i in range(5):
L1.append(input()) print(sorted(L1))
Chen
Michael
Xu
Li
Wang
['Chen', 'Li', 'Michael', 'Wang', 'Xu']

实现忽略大小写的排序(借助lower()函数将所有字符串变为小写再比较):

print(sorted(L1, key=str.lower))
chen
Li
Xu
Wang
michael
['chen', 'Li', 'michael', 'Wang', 'Xu']

4.要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:

chen
Li
Xu
Wang
michael
['chen', 'Li', 'michael', 'Wang', 'Xu']
['Xu', 'Wang', 'michael', 'Li', 'chen']
print(sorted(L1, key=str.lower, reverse=True))

5.使用sorted函数的关键在于key函数的实现,本质上key函数不同于C语言中的cmp函数,也就是说它不是比较型函数(返回bool),事实上key函数是将传入的参数(待排序的元素)进行某种转换并返回结果。sorted函数通过key函数将其元素逐一进行映射,并根据映射得到的序列进行排序,最后依据得到的序列对原有序列进行排序。

Practice

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

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]

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

#!/usr/bin/env python3

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]

def by_name(t):
return t[1] L2 = sorted(L, key=by_name)
print(L2)
sh-3.2# ./sorted2.py
[('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', 92)]

2017/2/16

Python学习札记(二十三) 函数式编程4 sorted的更多相关文章

  1. Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍

    参考: 函数式编程 高阶函数 Note A.函数式编程(Functional Programming)介绍 1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任 ...

  2. Python学习札记(二十一) 函数式编程2 map/reduce

    参考:map/reduce Note 1.map():map()函数接收两个参数,一个是函数,一个是Iterable.map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. ...

  3. Python学习札记(二十七) 函数式编程8 偏函数

    偏函数 NOTE 1.int()函数提供额外的base参数,默认值为10.如果传入base参数,就可以做N进制的转换: #!/usr/bin/env python3 import functools ...

  4. Python学习笔记二:函数式编程

    1:Python中,内置函数名相当于一个变量,指向内置函数.所以可以通过函数名调用相应函数,也可以给函数名赋值,改变它的内容,如:可以把另一个函数变量赋值给它,那它就指向了所赋值的函数了. 2:高级函 ...

  5. Python学习札记(三十三) 面向对象编程 Object Oriented Program 4

    参考:继承和多态 NOTE 著名的开闭原则: 对扩展开放:允许新增Animal子类: 对修改封闭:不需要修改依赖Animal类型的Animal_func()等函数. 1.eg. #!/usr/bin/ ...

  6. python学习第十一天 -- 函数式编程

    在介绍函数式编程之前,先介绍几个概念性的东西. 什么是函数式编程? 函数式编程的特点: 1.把计算视为函数而非指令; 2.纯函数式编程:不需要变量,没有副作用,测试简单; 3.支持高阶函数,代码简洁. ...

  7. Python学习总结之五 -- 入门函数式编程

    函数式编程 最近对Python的学习有些怠慢,最近的学习态度和学习效率确实很不好,目前这种病况正在好转. 今天,我把之前学过的Python中函数式编程简单总结一下,分享给大家,也欢迎并感谢大家提出意见 ...

  8. Python学习札记(二十五) 函数式编程6 匿名函数

    参考:匿名函数 NOTE 1.Python对匿名函数提供了有限的支持. eg. #!/usr/bin/env python3 def main(): lis = list(map(lambda x: ...

  9. Python学习札记(二十六) 函数式编程7 修饰器

    修饰器 NOTE 1.函数对象有一个__name__属性,可以拿到函数的名字: #!/usr/bin/env python3 def now(): print('2017/2/19') def mai ...

随机推荐

  1. C++ XML 序列化器

    http://www.cppblog.com/xlshcn/archive/2007/11/21/cppxmlserializer.html

  2. Android 让GridView的高度为Wrap_content根据内容自适应高度

    From:http://www.jayway.com/2012/10/04/how-to-make-the-height-of-a-gridview-wrap-its-content/ 如果把Grid ...

  3. JS通过正则限制 input 输入框只能输入整数、小数(金额或者现金)

    第一: 限制只能是整数 <input type = "text" name= "number" id = 'number' onkeyup= " ...

  4. kafka简介【转】

    一.为什么需要消息系统 () 解耦 在项目启动之初来预测将来项目会碰到什么需求,是极其困难的.消息系统在处理过程中间插入了一个隐含的.基于数据的接口层,两边的处理过程都要实现这一接口.这允许你独立的扩 ...

  5. 【转载】排查Linux机器是否已经被入侵

          背景信息:以下情况是在CentOS 6.9的系统中查看的,其它Linux发行版类似 1.入侵者可能会删除机器的日志信息,可以查看日志信息是否还存在或者是否被清空,相关命令示例: [root ...

  6. hello gradle

    首先下载和安装gradle可以参考官网下载地址,建议下载带有源码和文档的,以便后期查阅. 下载完以后打开终端输入gradle -v有如下信息输出,表示安装成功: bogon:gradle scott$ ...

  7. 一个不需要Log4Net的写日志的简单方法

    有些项目写日志时会选择大名鼎鼎的Log4Net.而在我们使用它时,总会出现一些诸如版本不匹配而造成的写日志失败的情况,还要改web.config,还要改AssemblyInfo.而且,它的失败,并不是 ...

  8. Redis的一些结构

  9. Just a Hook---hdu1698(线段树---区间处理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 现有n个金属(编号1---n),每个金属的材质都是铜,有m个操作,每个操作都是把编号 L 到 R ...

  10. django后台获取相同name名的数据

    django后台获取相同name名的post数据html: <form method="post"> <input type="text" n ...