Python学习札记(二十三) 函数式编程4 sorted
参考:sorted
NOTE
1.sorted,快速排序,时间复杂度O(nlogn)渐进最优.
#!/usr/bin/env python3L = []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 python3L = [('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相关推荐
- Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍
参考: 函数式编程 高阶函数 Note A.函数式编程(Functional Programming)介绍 1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任 ...
- Python学习笔记__4章 函数式编程
# 这是学习廖雪峰老师python教程的学习笔记 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程 ...
- python函数式编程读取数据-python学习笔记9:函数式编程
函数式编程(FunctionalProgramming) 基于lambda演算的一种编程方式 程序中只有函数 函数可以作为参数,同样可以作为返回值 纯函数式编程语言: LISP, Haskell Py ...
- python学习笔记(二十三) -- 多进程和多线程
目录 多线程多进程的意义 多进程的使用 方式一(fork): 只能在Unix/Linux/Mac系统下执行,windows不可以 方式二(multiprocessing.Process): 全平台通 ...
- Python学习札记(二) python3.5安装 + (假装是)第一个Python程序
参考: Mac OS 安装 Python3.5 廖雪峰Python教程:安装Python 笔记: 安装: 1.官方网站下载安装包:安装程序 2.执行安装程序完成Python3.5包的安装. 3.安装P ...
- 【Python学习系列二十三】Scikit_Learn库降维方法(矩阵分解)-PCAFA
1主成分分析PCA 1.1 精确PCA和似然估计 PCA基于最大方差的正交变量分解多维数据集.在scikit-learn库中,PCA的实现是先通过fit方法计算n维的特征值和特征向量,然后通过tran ...
- Python学习札记(二十八) 模块1
参考:模块 NOTE 1.模块:一个.py文件称为一个模块. 2.代码模块化的意义:a.提升程序的可维护性 b.不用重复造轮子 3.避免模块冲突,解决方法:引入了按目录来组织模块的方法,称为包(Pac ...
- 【Python学习笔记】- 06 函数式编程
1 什么是函数 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码块. 2 使用函数的好处 减少重复代码 程序容易扩展 保持代码的一致性 3 如何定义一个函数 以def关键词开头,后接函数的 ...
- Python学习日记(二十三) 类命名空间和组合
类命名空间 在一个类中它的函数(方法)属于动态属性,直接定义的变量属于静态属性 首先先定义一个类,并在这个类里面加入静态变量.属性等然后将一个对象实例化 class Fighter: #定义一个战机的 ...
最新文章
- 关闭VMware 不用的服务
- ConfigurationClassPostProcessor设计与实现
- Eclipse使用mybatis generator自动生成代码
- hdu 5424(dfs搜索)
- 关于字符串 --java
- 个人品牌这个事情,适用于长期主义者
- android kill process,为什么Application有时会在killProcess上重启?
- 7000条短信接口!福利赠送!
- 鱼类放流标记 PIT鱼类无线射频标记设备|读卡器
- 计算机国际标准编码,【计算机基础】常用编码格式
- Spring Cloud版本说明
- 火狐浏览器丢失书签,恢复无法处理备份文件的解决方案
- 【leetcode-652】寻找重复的子树
- android好用的文件管理器,安卓哪种文件管理器好用 三款文件管理器横向评测
- 一叶知春秋,一茗品浮生
- Python数据分析案例-利用多元线性回归与随机森林回归算法预测笔记本新品价格
- 单相锁相放大器,双相锁相放大器(AD630详解)
- 最全智能制造数字化应用方案
- UltraEdit-32 v14.10 简体中文版
- 小学-知识与能力【3】