Python中利用sorted()函数排序的简单教程


Posted in Python onApril 27, 2015

排序算法

排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个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 -1
  if x < y:
    return 1
  return 0

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

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

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

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

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

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

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

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

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

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

从上述例子可以看出,高阶函数的抽象能力是非常强大的,而且,核心代码可以保持得非常简洁。

Python 相关文章推荐
通过Python使用saltstack生成服务器资产清单
Mar 01 Python
理解Python中的With语句
Mar 18 Python
详解基于django实现的webssh简单例子
Jul 17 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
如何基于python操作json文件获取内容
Dec 24 Python
如何基于python实现画不同品种的樱花树
Jan 03 Python
Python Tkinter Entry和Text的添加与使用详解
Mar 04 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
Python中的filter()函数的用法
Apr 27 #Python
Python中的map()函数和reduce()函数的用法
Apr 27 #Python
PyMongo安装使用笔记
Apr 27 #Python
Windows下PyMongo下载及安装教程
Apr 27 #Python
Python操作MongoDB数据库PyMongo库使用方法
Apr 27 #Python
Python的函数的一些高阶特性
Apr 27 #Python
Python简单进程锁代码实例
Apr 27 #Python
You might like
基于mysql的论坛(1)
2006/10/09 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
node.js中path路径模块的使用方法实例分析
2020/02/13 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
VSCode下好用的Python插件及配置
2018/04/06 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
档案检查欢迎词
2014/01/13 职场文书
网络书店创业计划书
2014/02/07 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
安全生产计划书
2014/05/04 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
邀请函范文
2015/02/02 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
利用python做数据拟合详情
2021/11/17 Python
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
python中pymysql包操作数据库方法
2022/04/19 Python