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 相关文章推荐
Django的信号机制详解
May 05 Python
Python中函数及默认参数的定义与调用操作实例分析
Jul 25 Python
Python面向对象之接口、抽象类与多态详解
Aug 27 Python
python字典值排序并取出前n个key值的方法
Oct 17 Python
python实现批量视频分帧、保存视频帧
May 31 Python
使用Python Pandas处理亿级数据的方法
Jun 24 Python
Pytorch mask_select 函数的用法详解
Feb 18 Python
python的sys.path模块路径添加方式
Mar 09 Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 Python
Python爬虫数据的分类及json数据使用小结
Mar 29 Python
Python制作表白爱心合集
Jan 22 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处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
PHP使用ActiveMQ实例
2018/02/05 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
Javascript中数组方法汇总(推荐)
2015/04/01 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
python测试驱动开发实例
2014/10/08 Python
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
Python实现翻转数组功能示例
2018/01/12 Python
python async with和async for的使用
2019/06/20 Python
python单例模式的多种实现方法
2019/07/26 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
python标识符命名规范原理解析
2020/01/10 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
UML设计模式笔试题
2014/06/07 面试题
保密工作目标责任书
2014/07/28 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书