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迭代器的使用方法实例
Nov 21 Python
python 打印出所有的对象/模块的属性(实例代码)
Sep 11 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 Python
TensorFlow saver指定变量的存取
Mar 10 Python
Python 元类实例解析
Apr 04 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
详解mac python+selenium+Chrome 简单案例
Nov 08 Python
Python简单实现词云图代码及步骤解析
Jun 04 Python
Python3爬虫带上cookie的实例代码
Jul 28 Python
通过代码实例解析Pytest运行流程
Aug 20 Python
python爬取招聘要求等信息实例
Nov 20 Python
利用python进行数据加载
Jun 20 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
5种PHP创建数组的实例代码分享
2014/01/17 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
2016/11/04 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
js 赋值包含单引号双引号问题的解决方法
2014/02/26 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
JavaScript关于提高网站性能的几点建议(一)
2016/07/24 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
使用JavaScript触发过渡效果的方法
2017/01/19 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
基于JS脚本语言的基础语法详解
2017/07/22 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
koa router 多文件引入的方法示例
2019/05/22 Javascript
解决vue组件中click事件失效的问题
2019/11/09 Javascript
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
如何基于python实现归一化处理
2020/01/20 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
机关班子查摆问题及整改措施
2014/10/28 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技