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 23 Python
Python之re操作方法(详解)
Jun 14 Python
Python实现k-means算法
Feb 23 Python
用scikit-learn和pandas学习线性回归的方法
Jun 21 Python
Python单元测试工具doctest和unittest使用解析
Sep 02 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 Python
学习Python列表的基础知识汇总
Mar 10 Python
Python响应对象text属性乱码解决方案
Mar 31 Python
python多进程使用函数封装实例
May 02 Python
Python基于gevent实现高并发代码实例
May 15 Python
keras K.function获取某层的输出操作
Jun 29 Python
详解Python中list[::-1]的几种用法
Nov 16 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 allow_url_include的应用和解释
2010/04/22 PHP
PHP在不同页面间传递Json数据示例代码
2013/06/08 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
2017/02/05 PHP
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
Python中获取对象信息的方法
2015/04/27 Python
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
List, Set, Map是否继承自Collection接口?
2016/05/16 面试题
数据库基础的一些面试题
2012/02/25 面试题
会计毕业生求职简历的自我评价
2013/10/20 职场文书
市场营销职业生涯规划书范文
2014/01/12 职场文书
测试工程师程序员求职信范文
2014/02/20 职场文书
建房协议书
2014/04/11 职场文书
物流专业求职信
2014/06/30 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
2014年度个人总结范文
2015/03/09 职场文书
关于分班的感言
2015/08/04 职场文书
环保建议书作文500字
2015/09/14 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python