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的一段程序中如何使用多次事件循环详解
Sep 07 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
Oct 22 Python
Python中利用aiohttp制作异步爬虫及简单应用
Nov 29 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
python 调用钉钉机器人的方法
Feb 20 Python
Python配置虚拟环境图文步骤
May 20 Python
Python中那些 Pythonic的写法详解
Jul 02 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
Oct 16 Python
Python数据可视化:顶级绘图库plotly详解
Dec 07 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
Pytorch中.new()的作用详解
Feb 18 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
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
php堆排序实现原理与应用方法
2015/01/03 PHP
PHP删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
JavaScript中的子窗口与父窗口的互相调用问题
2017/02/08 Javascript
js date 格式化
2017/02/15 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
单页面vue引入百度统计的使用方法示例详解
2018/10/13 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
一个超级简单的python web程序
2014/09/11 Python
python中pass语句用法实例分析
2015/04/30 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
Python卸载模块的方法汇总
2016/06/07 Python
Python统计单词出现的次数
2018/04/04 Python
晚会主持词开场白
2014/03/17 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python
JavaScript实现登录窗体
2021/06/22 Javascript