参考: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相关推荐

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

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

  2. Python学习笔记__4章 函数式编程

    # 这是学习廖雪峰老师python教程的学习笔记 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程 ...

  3. python函数式编程读取数据-python学习笔记9:函数式编程

    函数式编程(FunctionalProgramming) 基于lambda演算的一种编程方式 程序中只有函数 函数可以作为参数,同样可以作为返回值 纯函数式编程语言: LISP, Haskell Py ...

  4. python学习笔记(二十三) -- 多进程和多线程

    目录 多线程多进程的意义 多进程的使用 方式一(fork):  只能在Unix/Linux/Mac系统下执行,windows不可以 方式二(multiprocessing.Process): 全平台通 ...

  5. Python学习札记(二) python3.5安装 + (假装是)第一个Python程序

    参考: Mac OS 安装 Python3.5 廖雪峰Python教程:安装Python 笔记: 安装: 1.官方网站下载安装包:安装程序 2.执行安装程序完成Python3.5包的安装. 3.安装P ...

  6. 【Python学习系列二十三】Scikit_Learn库降维方法(矩阵分解)-PCAFA

    1主成分分析PCA 1.1 精确PCA和似然估计 PCA基于最大方差的正交变量分解多维数据集.在scikit-learn库中,PCA的实现是先通过fit方法计算n维的特征值和特征向量,然后通过tran ...

  7. Python学习札记(二十八) 模块1

    参考:模块 NOTE 1.模块:一个.py文件称为一个模块. 2.代码模块化的意义:a.提升程序的可维护性 b.不用重复造轮子 3.避免模块冲突,解决方法:引入了按目录来组织模块的方法,称为包(Pac ...

  8. 【Python学习笔记】- 06 函数式编程

    1 什么是函数 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码块. 2 使用函数的好处 减少重复代码 程序容易扩展 保持代码的一致性 3 如何定义一个函数 以def关键词开头,后接函数的 ...

  9. Python学习日记(二十三) 类命名空间和组合

    类命名空间 在一个类中它的函数(方法)属于动态属性,直接定义的变量属于静态属性 首先先定义一个类,并在这个类里面加入静态变量.属性等然后将一个对象实例化 class Fighter: #定义一个战机的 ...

最新文章

  1. 关闭VMware 不用的服务
  2. ConfigurationClassPostProcessor设计与实现
  3. Eclipse使用mybatis generator自动生成代码
  4. hdu 5424(dfs搜索)
  5. 关于字符串 --java
  6. 个人品牌这个事情,适用于长期主义者
  7. android kill process,为什么Application有时会在killProcess上重启?
  8. 7000条短信接口!福利赠送!
  9. 鱼类放流标记 PIT鱼类无线射频标记设备|读卡器
  10. 计算机国际标准编码,【计算机基础】常用编码格式
  11. Spring Cloud版本说明
  12. 火狐浏览器丢失书签,恢复无法处理备份文件的解决方案
  13. 【leetcode-652】寻找重复的子树
  14. android好用的文件管理器,安卓哪种文件管理器好用 三款文件管理器横向评测
  15. 一叶知春秋,一茗品浮生
  16. Python数据分析案例-利用多元线性回归与随机森林回归算法预测笔记本新品价格
  17. 单相锁相放大器,双相锁相放大器(AD630详解)
  18. 最全智能制造数字化应用方案
  19. UltraEdit-32 v14.10 简体中文版
  20. 小学-知识与能力【3】

热门文章

  1. 9. 设计二个函数分别计算sinx和cosx_工程人常用的12个excel和9个wps技巧
  2. Zynq ROM 加载Mode 图表
  3. php中location.reload,js刷新页面location.reload()用法详解
  4. Java数据结构 利用双栈实现链表操作
  5. Node.js使用NodeMailer发送邮件
  6. mpVue配置sass全局变量
  7. PHP-Curl模拟HTTP请求
  8. 2018年计划读书清单
  9. 运维的shell小编(1)
  10. 2.1 操作系统的类型与结构