参考: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. VScode之JavaScript Snippet Pack

    一个片段包 使用例如: cl 回车或者tab键,就可以完整的打出console.log("") 还有很多快捷功能: 参考: https://marketplace.visualst ...

  2. 在linux下安装wordpress

    win下的简直傻瓜式操作:xampp打包一键安装 linux下的考虑到一些权限问题 还是有点蛋疼的 现在把流程贴出来做下记录: linux下安装xampp和wordpress的流程 ×由于linux下 ...

  3. 代码片段,使用TIKA来解析PDF,WORD和EMAIL

    /** * com.jiaoyiping.pdstest.TestTika.java * Copyright (c) 2009 Hewlett-Packard Development Company, ...

  4. iOS5 ARC学习笔记:strong、weak等详解

    2013-03-25 13:41 佚名 oschina 字号:T | T iOS5中加入了新知识,就是ARC,其实我并不是很喜欢它,因为习惯了自己管理内存.但是学习还是很有必要的.现在我们看看iOS5 ...

  5. 【模块化开发】------requireJS的基本使用------【巷子】

    前言 为了提高代码的复用度,开发人员会按照功能把大量的js代码分成若干文件,这样在多个页面就可以使用同一个文件了.,下面是某个网站的js引用情况 虽然代码的复用度提升了,但是缺点也体现了出来 缺点: ...

  6. AE导出mov

    最近安装了AE发现没法导出MOV格式的: 感觉应该是没有安装支持MOV的播放器之类的原因造成的:果断去下载一个quicktime 安装好之后重启发现真的有 mov 格式了

  7. SaltStack生产案例-系统初始化

    需求分析 一,系统初始化 1.1  关闭SELinux 1.2  关闭默认iptables 1.3  时间同步(配置NTP)  1.4  文件描述符(必备/etc/security/limmits.c ...

  8. poj3630 Phone List【Trie树】

    Phone List Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34805   Accepted: 9980 Descr ...

  9. binlog分析方法

    线上处理问题的时候经常遇到业务说写入了但是数据不对,这种情况八成是业务改了之后又改过来了.但是我们需要证据,下面我们就说说简单的binlog分析 工具:mysqlbinlog #-vvv显示明文sql ...

  10. Linux服务器报错too many open files错误解决方案

    1.本质解决方案按照oracle的安装脚本中以下几项文件进行相应配置: cp /etc/security/limits.conf /etc/security/limits.conf.bak echo ...