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的几种开发工具介绍
Mar 07 Python
python中MySQLdb模块用法实例
Nov 10 Python
Python导入txt数据到mysql的方法
Apr 08 Python
pycharm安装图文教程
May 02 Python
python之Character string(实例讲解)
Sep 25 Python
python 顺时针打印矩阵的超简洁代码
Nov 14 Python
python 实现UTC时间加减的方法
Dec 31 Python
python日志模块logbook使用方法
Sep 19 Python
基于python模拟TCP3次握手连接及发送数据
Nov 06 Python
python+flask编写一个简单的登录接口
Nov 13 Python
python 列表推导和生成器表达式的使用
Feb 01 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 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的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
PHP查询快递信息的方法
2015/03/07 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
js实现下一页页码效果
2017/03/07 Javascript
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
django框架使用方法详解
2019/07/18 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
python Gabor滤波器讲解
2020/10/26 Python
运动会广播稿200字
2014/10/18 职场文书
项目负责人岗位职责
2015/02/15 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
2015年学校综合治理工作总结
2015/07/20 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
如何用python反转图片,视频
2021/04/24 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python