python排序函数sort()与sorted()的区别


Posted in Python onSeptember 18, 2018

python 中sorted与sort有什么区别

sort(cmp=None, key=None, reverse=False)
sorted(iterable, cmp=None, key=None, reverse=False)
sort是容器的函数,用List的成员函数sort进行排序
sorted是Python的内建函数相同的参数,用built-in函数sorted进行排序
sorted(iterable,key=None,reverse=False),返回新的列表,对所有可迭代的对象均有效
sort(key=None,reverse=False) 就地改变列表 reverse:True反序;False 正序

例如:

>>> a=[1,3,5,2,9,4,7,8,6,0]
>>> a.sort()
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a=[1,3,5,2,9,4,7,8,6,0]
>>> sorted(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a
[1, 3, 5, 2, 9, 4, 7, 8, 6, 0]

以下是详细说明

Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。

sorted(iterable,key=None,reverse=False),返回新的列表,对所有可迭代的对象均有效

sort(key=None,reverse=False) 就地改变列表 reverse:True反序;False 正序

sort是容器的函数:sort(cmp=None, key=None, reverse=False)

sorted是python的内建函数:sorted(iterable, cmp=None, key=None, reverse=False)

参数解析:

cmp:比较函数,比较什么参数由key决定。例如:cmp(e1, e2) 是具有两个参数的比较函数,返回值:负数(e1 < e2);0(e1 == e2);正数( e1 > e2)。
key:用列表元素的某个属性或函数作为关键字。
reverse:排序规则,可以选择True或者False。
sorted多一个参数iterable:待排序的可迭代类型的容器 

示例1:

>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort()
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]


>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> sorted(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
>>> a
[1, 2, 5, 3, 9, 4, 6, 8, 7, 0, 12]

区别:

对于一个无序的列表a,调用a.sort(),对a进行排序后返回a,sort()函数修改待排序的列表内容。
而对于同样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。

示例2:

假设用元组保存每一个学生的信息,包括学号,姓名,年龄。用列表保存所有学生的信息。

>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> list1.sort()
>>> list1
[(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]


>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> sorted(list1)
[(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]
>>> list1
[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

小结:由示例可以看出,当列表由list(或者tuple)组成时,默认情况下,sort和sorted都会根据list[0](或者tuple[0])作为排序的key,进行排序。

以上都是默认的排序方式,我们可以编写代码控制两个函数的排序行为。主要有三种方式:基于key函数;基于cmp函数和基于reverse函数

1)基于key函数排序

>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> list1.sort(key=lambda x:x[2])
>>> list1
[(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)]


>>> list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> sorted(list1, key=lambda x:x[2])
[(5, 'Lucy', 19), (8, 'Logan', 20), (2, 'Mike', 22)]
>>> list1
[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

2)基于cmp函数

>>> list1=[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> list1.sort(cmp=lambda x,y:cmp(x[1],y[1]))
>>> list1
[(5, 'Lucy', 19), (2, 'Mike', 22), (8, 'Zogan', 20)]


>>> list1=[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
>>> sorted(list1, cmp=lambda x,y:cmp(x[1],y[1]))
[(5, 'Lucy', 19), (2, 'Mike', 22), (8, 'Zogan', 20)]
>>> list1
[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

3)基于reverse函数

>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort(reverse=False)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
 

>>> a=[1,2,5,3,9,4,6,8,7,0,12]
>>> a.sort(reverse=True)
>>> a
[12, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a.sort(reverse=True)

小结:reverse=False为升序排序;reverse=True为降序排序

Python 相关文章推荐
Python实现字典的key和values的交换
Aug 04 Python
python中redis的安装和使用
Dec 04 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
Sep 25 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
Mar 29 Python
使用Python实现跳帧截取视频帧
May 31 Python
python操作文件的参数整理
Jun 11 Python
python实现websocket的客户端压力测试
Jun 25 Python
python+Django实现防止SQL注入的办法
Oct 31 Python
详解python环境安装selenium和手动下载安装selenium的方法
Mar 17 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
May 09 Python
Pytorch实现WGAN用于动漫头像生成
Mar 04 Python
python模板入门教程之flask Jinja
Apr 11 Python
idea创建springMVC框架和配置小文件的教程图解
Sep 18 #Python
如何安装多版本python python2和python3共存以及pip共存
Sep 18 #Python
python2与python3共存问题的解决方法
Sep 18 #Python
Win10下python3.5和python2.7环境变量配置教程
Sep 18 #Python
Python global全局变量函数详解
Sep 18 #Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 #Python
Python sorted函数详解(高级篇)
Sep 18 #Python
You might like
PHP将进程作为守护进程的方法
2015/03/19 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
一个高效的JavaScript压缩工具下载集合
2007/03/06 Javascript
js 学习笔记(三)
2009/12/29 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
JavaScript 冒泡排序和选择排序的实现代码
2016/09/03 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
javascript实现二叉树的代码
2017/06/08 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
Javascript实现打鼓效果
2021/01/29 Javascript
星球大战与Python之间的那些事
2016/01/07 Python
Python环境变量设置方法
2016/08/28 Python
20招让你的Python飞起来!
2016/09/27 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
python开根号实例讲解
2020/08/30 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
高级3D打印市场:Gambody
2019/12/26 全球购物
房产继承公证书
2014/04/09 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
困难补助申请报告
2015/05/19 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书