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生成验证码图片代码分享
Jan 28 Python
Python冒泡排序注意要点实例详解
Sep 09 Python
Python中类型检查的详细介绍
Feb 13 Python
详解Python map函数及Python map()函数的用法
Nov 16 Python
python采集微信公众号文章
Dec 20 Python
Python中单线程、多线程和多进程的效率对比实验实例
May 14 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
Python实现语音识别和语音合成功能
Sep 20 Python
Python读取Excel数据并生成图表过程解析
Jun 18 Python
python从PDF中提取数据的示例
Oct 30 Python
你喜欢篮球吗?Python实现篮球游戏
Jun 11 Python
Python加密技术之RSA加密解密的实现
Apr 08 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语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
PHP与javascript实现变量交互的示例代码
2013/07/23 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
js字符编码函数区别分析
2008/06/05 Javascript
jQuery 加上最后自己的验证
2009/11/04 Javascript
JS调试必备的5个debug技巧
2014/03/07 Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
2014/11/19 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
jstree的简单实例
2016/12/01 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
python随机生成指定长度密码的方法
2015/04/04 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
小狗电器官方商城:中国高端吸尘器品牌
2017/03/29 全球购物
Conforama瑞士:家具、厨房、电器、装饰
2020/09/06 全球购物
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
个人考核材料
2014/05/15 职场文书
工程部岗位职责
2015/02/10 职场文书
感动中国何玥观后感
2015/06/02 职场文书
青涩记忆观后感
2015/06/18 职场文书
vue实力踩坑之push当前页无效
2022/04/10 Vue.js