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 CSV模块使用实例
Apr 09 Python
Python对列表排序的方法实例分析
May 16 Python
Python中强大的命令行库click入门教程
Dec 26 Python
python爬虫获取小区经纬度以及结构化地址
Dec 30 Python
python中aioysql(异步操作MySQL)的方法
Apr 11 Python
python自动发邮件总结及实例说明【推荐】
May 31 Python
详解python中的time和datetime的常用方法
Jul 08 Python
Python基础之函数原理与应用实例详解
Jan 03 Python
Django ModelForm操作及验证方式
Mar 30 Python
python的json包位置及用法总结
Jun 21 Python
python爬虫--selenium模块
Mar 31 Python
pandas 实现将NaN转换为None
May 14 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添加MySQL数据记录代码
2008/06/07 PHP
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
javascript的函数
2007/01/31 Javascript
Javascript 继承机制的实现
2009/08/12 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
Kindeditor在线文本编辑器如何过滤HTML
2016/04/14 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
AngularJS  $on、$emit和$broadcast的使用
2016/09/05 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
JavaScript 异步调用
2017/10/25 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
Python中的多行注释文档编写风格汇总
2016/06/16 Python
Python反射用法实例简析
2017/12/22 Python
pandas去除重复列的实现方法
2019/01/29 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
申报职称专业技术个人的自我评价
2013/12/12 职场文书
会计应聘求职信范文
2013/12/17 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
广告业务员岗位职责
2015/02/13 职场文书
大国崛起英国观后感
2015/06/02 职场文书
舞出我人生观后感
2015/06/16 职场文书
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript