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基础教程之常用运算符
Aug 29 Python
python发送邮件功能实现代码
Jul 15 Python
python好玩的项目—色情图片识别代码分享
Nov 07 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
Oct 09 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
Windows系统Python直接调用C++ DLL的方法
Aug 01 Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 Python
python如何查看安装了的模块
Jun 23 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 03 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
Feb 07 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
Feb 20 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
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
js定时器的使用(实例讲解)
2014/01/06 Javascript
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
Python每天必学之bytes字节
2016/01/28 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
迟到检讨书400字
2014/01/13 职场文书
市场开发计划书
2014/05/07 职场文书
商务英语专业求职信
2014/06/26 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
Mysql使用全文索引(FullText index)的实例代码
2022/04/03 MySQL