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装饰器使用示例及实际应用例子
Mar 06 Python
实例讲解Python爬取网页数据
Jul 08 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
超简单使用Python换脸实例
Mar 27 Python
Django 使用easy_thumbnails压缩上传的图片方法
Jul 26 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 Python
Django实现后台上传并显示图片功能
May 29 Python
python如何快速生成时间戳
Jul 21 Python
pycharm 关闭search everywhere的解决操作
Jan 15 Python
python基础之类方法和静态方法
Oct 24 Python
python中urllib包的网络请求教程
Apr 19 Python
python实现学员管理系统(面向对象版)
Jun 05 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
PHP extract 将数组拆分成多个变量的函数
2010/06/30 PHP
php检测图片木马多进制编程实践
2013/04/11 PHP
PHP中soap的用法实例
2014/10/24 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
php base64 编码与解码实例代码
2017/03/21 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
js实现九宫格布局效果
2020/05/28 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
Python中给List添加元素的4种方法分享
2014/11/28 Python
python开发之文件操作用法实例
2015/11/13 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
深入浅析Python2.x和3.x版本的主要区别
2018/11/30 Python
python使用udp实现聊天器功能
2018/12/10 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
用python解压分析jar包实例
2020/01/16 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
人力资源职位说明书
2014/07/29 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
毕业生自荐信范文
2015/03/05 职场文书
安全承诺书格式范本
2015/04/28 职场文书
Python爬虫实战之爬取携程评论
2021/06/02 Python