sorted


排序算法

排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。通常规定,对于两个元素xy,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。

Python内置的sorted()函数就可以对list进行排序:

>>> sorted([36,5,12,9,21])
[5, 9, 12, 21, 36]

此外,sorted()函数也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。比如,如果要倒序排序,我们就可以自定义一个reversed_cmp函数:

def reversed_cmp(x, y):if x > y:return -1if x < y:return 1return 0

传入自定义的比较函数reversed_cmp,就可以实现倒序排序:

sorted([36, 5, 12, 9, 21], reversed_cmp)
[36, 21, 12, 9, 5]

我们再看一个字符串排序的例子:

>>> sorted(['dsa','sadada','asdad','sadasda'])
['asdad', 'dsa', 'sadada', 'sadasda']

默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。

现在,我们提出排序应该忽略大小写,按照字母序排序。要实现这个算法,不必对现有代码大加改动,只要我们能定义出忽略大小写的比较算法就可以:

def cmp_ignore_case(s1, s2):u1 = s1.upper()u2 = s2.upper()if u1 < u2:return -1if u1 > u2:return 1return 0

忽略大小写来比较两个字符串,实际上就是先把字符串都变成大写(或者都变成小写),再比较。

这样,我们给sorted传入上述比较函数,即可实现忽略大小写的排序:

sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)
['about', 'bob', 'Credit', 'Zoo']

转载于:https://www.cnblogs.com/-zhong/p/10877950.html

python学习之路(17)相关推荐

  1. Python学习之路9☞面向对象的程序设计

    Python学习之路9☞面向对象的程序设计 一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什 ...

  2. Python学习之路5☞文件处理

    Python学习之路5☞文件处理 一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 1 正趣果上果 2 Interesting fruit fruit 3 4 ...

  3. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  4. python之路 mysql 博客园_教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql...

    教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql Easy_install安装MySQLdb 很简单,以至于我不晓得该怎么说.一句话. sodu ...

  5. Python学习之路—2018/7/14

    Python学习之路-2018/7/12 3.功能开发 3.3 设计博客首页 博客首页中最重要的就是中间的文章区域,所以我首先把文章区域设计出来,一开始并没有数据,如果用orm添加或者直接在数据库添加 ...

  6. Python学习之路—2018/6/20

    Python学习之路-2018/6/20 1.模板语法之变量 views.py def index(request):import datetimes="gyq"l=[1,2,3] ...

  7. python 学习之路开始了

    python 学习之路开始了.....记录点点滴滴.... 转载于:https://www.cnblogs.com/chobit/p/6163287.html

  8. python学习之路0x00

    Python学习之路0x00 在学习python之前,要知道什么是python? python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,与c语言不同, c语言要编译后才能执行.而 ...

  9. 我的Python学习之路(一)_Mr_Ouyang

    我的Python学习之路(一)_Mr_Ouyang 笔者按: 本文从18:55开始写作,至19:38中断,又从21:12始继续,至23:22写就. 共计耗时113分钟,总字数9081字,约80.4字/ ...

  10. 小猪的Python学习之旅 —— 17.Python数据分析:我主良缘交友了解下

    小猪的Python学习之旅 -- 17.Python数据分析:我主良缘交友了解下 标签:Python 一句话概括本文: 爬取我主良缘交友所有的妹子信息,利用Jupyter Notebook对五个方面: ...

最新文章

  1. x264代码剖析(一):图文详解x264在Windows平台上的搭建
  2. python3 判断进程是否存在
  3. 【赫夫曼树详解】赫夫曼树简介及java代码实现-数据结构07
  4. 浏览器弹不出java_打开网址跳出弹窗“您的浏览器没有获得Java virtual machine 支持”,怎么办?...
  5. paginatorhelper ajax,Bootstrap Paginator+PageHelper实现分页效果_蓝瞳_前端开发者
  6. Spring-Data-JPA入门--增删改查1
  7. Hive中Map数据类型转String类型,其中具体内容不变
  8. spring+mybatis+log4j 输出SQL
  9. 数组与字符串的相互转换
  10. 廖雪峰Git学习 | 笔记二:修改以及版本回退
  11. 如何登录新浪微博html5,新浪微博怎么登陆
  12. Hive实战之Youtube数据集
  13. HDU1175 连连看 模拟搜索
  14. python分割文件_python简单分割文件的方法
  15. 汇编语言(第三版)第十章 CALL 和 RET 指令 笔记
  16. ORA-00955: name is already used by an existing object
  17. pdf转图片的两种方式(java)
  18. 视频流媒体服务器中怎么降低直播出现的延迟现象?
  19. 有奖互动 | 打工人、爱码士都看这里
  20. 【NPM】ubuntu20.04安装npm

热门文章

  1. 程序员想早点下班被经理拒绝,一气之下要辞职,经理慌了
  2. linux shell编程if语句内判断参数详解【ZT】
  3. c++自由读写配置ifstream(一)
  4. 点阵字体显示系列之三:使用ncurses显示汉字
  5. excel删除行 uipath_UiPath之常见问题集锦(二)
  6. 【kafka】Kafka 幂等 Producer
  7. 【ElasticSearch】es 使用function_score及soft_score定制搜索结果的分数
  8. 【ElasticSearch】Es 源码之 NamedWriteableRegistry 源码解读
  9. 【Flink】Flink 单个任务 多个流的消费同一个topic的时候其中一个流卡死 不消费
  10. Linux : rz、sz命令-从本地拷贝文件到服务器