python list排序的两种方法及实例讲解


Posted in Python onMarch 20, 2017

对List进行排序,Python提供了两个方法

方法1.用List的内建函数list.sort进行排序

list.sort(func=None, key=None, reverse=False)

Python实例:

>>> list = [2,5,8,9,3] 
>>> list 
[2,5,8,9,3] 
>>> list.sort() 
>>> list 
[2, 3, 5, 8, 9]

方法2.用序列类型函数sorted(list)进行排序(从2.4开始)

Python实例:

>>> list = [2,5,8,9,3] 
>>> list 
[2,5,8,9,3] 
>>> sorted(list) 
[2, 3, 5, 8, 9]

两种方法的区别:

sorted(list)返回一个对象,可以用作表达式。原来的list不变,生成一个新的排好序的list对象。

list.sort() 不会返回对象,改变原有的list。

其他sort的实例:

实例1:正向排序

>>>L = [2,3,1,4]
>>>L.sort()
>>>L
>>>[1,2,3,4]

实例2:反向排序

>>>L = [2,3,1,4]
>>>L.sort(reverse=True)
>>>L
>>>[4,3,2,1]

实例3:对第二个关键字排序

>>>L = [('b',6),('a',1),('c',3),('d',4)]
>>>L.sort(lambda x,y:cmp(x[1],y[1])) 
>>>L
>>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]

实例4: 对第二个关键字排序

>>>L = [('b',6),('a',1),('c',3),('d',4)]
>>>L.sort(key=lambda x:x[1]) 
>>>L
>>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]

实例5: 对第二个关键字排序

>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>import operator
>>>L.sort(key=operator.itemgetter(1)) 
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

实例6:(DSU方法:Decorate-Sort-Undercorate)

>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort
>>>A.sort()
>>>L = [s[2] for s in A]
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

以上给出了6中对List排序的方法,其中实例3.4.5.6能起到对以List item中的某一项

为比较关键字进行排序.

效率比较:

cmp < DSU < key

通过实验比较,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相当

多关键字比较排序:

实例7:

>>>L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:x[1])
>>> L
>>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)]

我们看到,此时排序过的L是仅仅按照第二个关键字来排的,

如果我们想用第二个关键字排过序后再用第一个关键字进行排序呢?有两种方法

实例8:

>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:(x[1],x[0]))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]

实例9:

>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=operator.itemgetter(1,0))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]

为什么实例8能够工作呢?原因在于tuple是的比较从左到右比较的,比较完第一个,如果相等,比较第二个

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Python 相关文章推荐
Python实现的Excel文件读写类
Jul 30 Python
Python字符串拼接的几种方法整理
Aug 02 Python
使用python实现链表操作
Jan 26 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
Python 实现域名解析为ip的方法
Feb 14 Python
详解python tkinter教程-事件绑定
Mar 28 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
Nov 19 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 Python
Django 权限管理(permissions)与用户组(group)详解
Nov 30 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
Mar 20 #Python
Python 专题四 文件基础知识
Mar 20 #Python
python 与GO中操作slice,list的方式实例代码
Mar 20 #Python
Python闭包的两个注意事项(推荐)
Mar 20 #Python
使用python实现生成用户信息
Mar 20 #Python
Unicode和Python的中文处理
Mar 19 #Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
Mar 19 #Python
You might like
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
PHP查询快递信息的方法
2015/03/07 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
使用JavaScript switch case 另类写法
2010/03/14 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
2016/03/13 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
vue.js表格分页示例
2016/10/18 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
vscode下vue项目中eslint的使用方法
2019/01/13 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
layui动态加载多表头的实例
2019/09/05 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
python实现按行切分文本文件的方法
2016/04/18 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
python实现统计文本中单词出现的频率详解
2019/05/20 Python
12个Python程序员面试必备问题与答案(小结)
2019/06/24 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
《去年的树》教学反思
2014/04/11 职场文书
学生打架检讨书
2014/10/20 职场文书
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android