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实现的简单万年历例子分享
Apr 25 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
浅谈flask中的before_request与after_request
Jan 20 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
Feb 18 Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 Python
Python 变量类型详解
Oct 10 Python
详解小白之KMP算法及python实现
Apr 04 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
Aug 30 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
Python 必须了解的5种高级特征
Sep 10 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
Nov 22 Python
Python 数据科学 Matplotlib图库详解
Jul 07 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/07/06 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
php常用正则函数实例小结
2016/12/29 PHP
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
JavaScript的Function详细
2006/11/14 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
JavaScript Scoping and Hoisting 翻译
2012/07/03 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
详解jQuery简单的表单应用
2016/12/16 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
Python设计模式之单例模式实例
2014/04/26 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
python实现字典嵌套列表取值
2019/12/16 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
戴森英国官网:Dyson英国
2019/05/07 全球购物
自动化专业本科毕业生求职信
2013/10/20 职场文书
分厂厂长岗位职责
2013/12/29 职场文书
白酒市场开发计划书
2014/01/09 职场文书
员工评语大全
2014/01/19 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
银行培训心得体会范文
2016/01/09 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书