Python中的sort()方法使用基础教程


Posted in Python onJanuary 08, 2017

一、基本形式

sorted(iterable[, cmp[, key[, reverse]]])
iterable.sort(cmp[, key[, reverse]])

 参数解释:

 (1)iterable指定要排序的list或者iterable,不用多说;

 (2)cmp为函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数,如:

       students为类对象的list,没个成员有三个域,用sorted进行比较时可以自己定cmp函数,例如这里要通过比较第三个数据成员来排序,代码可以这样写:

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda student : student[2])

(3)key为函数,指定取待排序元素的哪一项进行排序,函数用上面的例子来说明,代码如下:

sorted(students, key=lambda student : student[2])

       key指定的lambda函数功能是去元素student的第三个域(即:student[2]),因此sorted排序时,会以students所有元素的第三个域来进行排序。

二、普通用法:

 1.原址排序

1)列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。

x = [4, 6, 2, 1, 7, 9]
x.sort()
print x # [1, 2, 4, 6, 7, 9]

2.副本排序

1)[:]分片方法

x =[4, 6, 2, 1, 7, 9]
y = x[ : ]
y.sort()
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]

注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本。

2)sorted方法

sorted返回一个有序的副本,并且类型总是列表,如下:

x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9] 
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']

三、高级用法

1.自定义cmp比较函数

def comp(x, y):
if x < y:
return 1
elif x > y:
return -1
else:
return 0
nums = [3, 2, 8 ,0 , 1]
nums.sort(comp)
print nums # 降序排序[8, 3, 2, 1, 0]
nums.sort(cmp) # 调用内建函数cmp ,升序排序
print nums # 降序排序[0, 1, 2, 3, 8]

2.自定义key和reverse

1.reverse实现降序排序,需要提供一个布尔值,默认为False(升序排列)。

2.key在使用时必须提供一个排序过程总调用的函数:

alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]
# 多级排序,先按照第3个元素排序,然后按照第2个元素排序:
print sorted(alist, cmp = None, key = lambda x:(int(x[2]), int(x[1])), reverse = False)
-------------------------------------------------------------------------------------------
[('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]

 四、operator.itemgetter函数

operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子。

a = [1,2,3]
>>> b=operator.itemgetter(1)   //定义函数b,获取对象的第1个域的值
>>> b(a)
2
>>> b=operator.itemgetter(1,0) //定义函数b,获取对象的第1个域和第0个的值
>>> b(a)
(2, 1)

要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。

itemgetter在sort中的用法:

from operator import itemgetter
alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]
# 多级排序,先按照第3个元素排序,然后按照第2个元素排序:
print sorted(alist, cmp = None, key = itemgetter(2, 1), reverse = False)
print sorted(alist, cmp = None, key = lambda x:itemgetter(2, 1)(x), reverse = False)
print sorted(alist, cmp = None, key = lambda x:map(int, itemgetter(2, 1)(x)), reverse = False)
--------------------------------------------------------------------------------------------------
[('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
[('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
[('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]

以上所述是小编给大家介绍的Python中的sort()方法使用基础 ,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
python单例模式实例分析
Apr 08 Python
利用Python读取txt文档的方法讲解
Jun 23 Python
Django中的文件的上传的几种方式
Jul 23 Python
python bmp转换为jpg 并删除原图的方法
Oct 25 Python
python2.7实现邮件发送功能
Dec 12 Python
python3实现逐字输出的方法
Jan 23 Python
Python比较配置文件的方法实例详解
Jun 06 Python
python3.4 将16进制转成字符串的实例
Jun 12 Python
python中 * 的用法详解
Jul 10 Python
Python 继承,重写,super()调用父类方法操作示例
Sep 29 Python
Django中提示消息messages的设置方式
Nov 15 Python
Python如何使用ConfigParser读取配置文件
Nov 12 Python
Python守护进程和脚本单例运行详解
Jan 06 #Python
Python 基础知识之字符串处理
Jan 06 #Python
详解Python中的相对导入和绝对导入
Jan 06 #Python
Python中取整的几种方法小结
Jan 06 #Python
Python正则表达式实现截取成对括号的方法
Jan 06 #Python
关于Python元祖,列表,字典,集合的比较
Jan 06 #Python
Python线程指南详细介绍
Jan 05 #Python
You might like
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
第九节 绑定 [9]
2006/10/09 PHP
php 输出双引号&quot;与单引号'的方法
2010/05/09 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
php编程每天必学之表单验证
2016/03/01 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
2016/04/14 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
jquery 分页控件实现代码
2009/11/30 Javascript
限制文本框输入N个字符的js代码
2010/05/13 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
javaScript同意等待代码实现心得
2011/01/01 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
JQuery勾选指定name的复选框集合并显示的方法
2015/05/18 Javascript
JavaScript学习笔记之数组的增、删、改、查
2016/03/23 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
vue实现移动端返回顶部
2020/10/12 Javascript
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
Python实现控制台输入密码的方法
2015/05/29 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
HTML5应用之文件上传
2016/12/30 HTML / CSS
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
德国苹果商店:MacTrade
2020/05/18 全球购物
地方白酒代理协议书
2014/10/25 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
公司员工管理制度
2015/08/04 职场文书
聘任通知书
2015/09/21 职场文书
八年级作文之感恩
2019/11/22 职场文书