python学习之路(17)
sorted
排序算法
排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。通常规定,对于两个元素x
和y
,如果认为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)相关推荐
- Python学习之路9☞面向对象的程序设计
Python学习之路9☞面向对象的程序设计 一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什 ...
- Python学习之路5☞文件处理
Python学习之路5☞文件处理 一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 1 正趣果上果 2 Interesting fruit fruit 3 4 ...
- Python学习之路【第一篇】-Python简介和基础入门
1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...
- python之路 mysql 博客园_教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql...
教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql Easy_install安装MySQLdb 很简单,以至于我不晓得该怎么说.一句话. sodu ...
- Python学习之路—2018/7/14
Python学习之路-2018/7/12 3.功能开发 3.3 设计博客首页 博客首页中最重要的就是中间的文章区域,所以我首先把文章区域设计出来,一开始并没有数据,如果用orm添加或者直接在数据库添加 ...
- Python学习之路—2018/6/20
Python学习之路-2018/6/20 1.模板语法之变量 views.py def index(request):import datetimes="gyq"l=[1,2,3] ...
- python 学习之路开始了
python 学习之路开始了.....记录点点滴滴.... 转载于:https://www.cnblogs.com/chobit/p/6163287.html
- python学习之路0x00
Python学习之路0x00 在学习python之前,要知道什么是python? python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,与c语言不同, c语言要编译后才能执行.而 ...
- 我的Python学习之路(一)_Mr_Ouyang
我的Python学习之路(一)_Mr_Ouyang 笔者按: 本文从18:55开始写作,至19:38中断,又从21:12始继续,至23:22写就. 共计耗时113分钟,总字数9081字,约80.4字/ ...
- 小猪的Python学习之旅 —— 17.Python数据分析:我主良缘交友了解下
小猪的Python学习之旅 -- 17.Python数据分析:我主良缘交友了解下 标签:Python 一句话概括本文: 爬取我主良缘交友所有的妹子信息,利用Jupyter Notebook对五个方面: ...
最新文章
- x264代码剖析(一):图文详解x264在Windows平台上的搭建
- python3 判断进程是否存在
- 【赫夫曼树详解】赫夫曼树简介及java代码实现-数据结构07
- 浏览器弹不出java_打开网址跳出弹窗“您的浏览器没有获得Java virtual machine 支持”,怎么办?...
- paginatorhelper ajax,Bootstrap Paginator+PageHelper实现分页效果_蓝瞳_前端开发者
- Spring-Data-JPA入门--增删改查1
- Hive中Map数据类型转String类型,其中具体内容不变
- spring+mybatis+log4j 输出SQL
- 数组与字符串的相互转换
- 廖雪峰Git学习 | 笔记二:修改以及版本回退
- 如何登录新浪微博html5,新浪微博怎么登陆
- Hive实战之Youtube数据集
- HDU1175 连连看 模拟搜索
- python分割文件_python简单分割文件的方法
- 汇编语言(第三版)第十章 CALL 和 RET 指令 笔记
- ORA-00955: name is already used by an existing object
- pdf转图片的两种方式(java)
- 视频流媒体服务器中怎么降低直播出现的延迟现象?
- 有奖互动 | 打工人、爱码士都看这里
- 【NPM】ubuntu20.04安装npm
热门文章
- 程序员想早点下班被经理拒绝,一气之下要辞职,经理慌了
- linux shell编程if语句内判断参数详解【ZT】
- c++自由读写配置ifstream(一)
- 点阵字体显示系列之三:使用ncurses显示汉字
- excel删除行 uipath_UiPath之常见问题集锦(二)
- 【kafka】Kafka 幂等 Producer
- 【ElasticSearch】es 使用function_score及soft_score定制搜索结果的分数
- 【ElasticSearch】Es 源码之 NamedWriteableRegistry 源码解读
- 【Flink】Flink 单个任务 多个流的消费同一个topic的时候其中一个流卡死 不消费
- Linux : rz、sz命令-从本地拷贝文件到服务器