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下载文件时显示下载进度的方法
Apr 02 Python
Python与Redis的连接教程
Apr 22 Python
深入解读Python解析XML的几种方式
Feb 16 Python
Python scikit-learn 做线性回归的示例代码
Nov 01 Python
python 随机打乱 图片和对应的标签方法
Dec 14 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
python通过函数名调用函数的几种场景
Sep 23 Python
Python可以用来做什么
Nov 23 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 Python
Python实现的扫码工具居然这么好用!
Jun 07 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
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
jquery获取input表单值的代码
2010/04/19 Javascript
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
2010/06/28 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
禁用Enter键表单自动提交实现代码
2014/05/22 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
js判断是否是手机页面
2017/03/17 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
js实现一款简单踩白块小游戏(曾经很火)
2019/12/02 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
Python模拟FTP文件服务器的操作方法
2020/02/18 Python
详解Python多线程下的list
2020/07/03 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
教师专业理论水平的自我评价分享
2013/11/09 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
2015社区爱国卫生工作总结
2015/04/21 职场文书
2015年中秋寄语
2015/07/31 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
CSS3常见动画的实现方式
2021/04/14 HTML / CSS
Mysql Online DDL的使用详解
2021/05/20 MySQL
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang
Python实现列表拼接和去重的三种方式
2021/07/02 Python