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程序与C++程序的联合使用
Apr 07 Python
举例讲解Django中数据模型访问外键值的方法
Jul 21 Python
python框架django基础指南
Sep 08 Python
微信 用脚本查看是否被微信好友删除
Oct 28 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
Nov 23 Python
Python XML转Json之XML2Dict的使用方法
Jan 15 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
python实现最小二乘法线性拟合
Jul 19 Python
如何使用python进行pdf文件分割
Nov 11 Python
python中元组的用法整理
Jun 15 Python
使用tensorflow根据输入更改tensor shape
Jun 23 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
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
PHP多个文件上传到服务器实例
2014/10/29 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
很棒的学习jQuery的12个网站推荐
2011/04/28 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
jquery 插件学习(一)
2012/08/06 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
详解React开发必不可少的eslint配置
2018/02/05 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
小程序实现日历左右滑动效果
2019/10/21 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
2020/09/04 Javascript
Python的Tornado框架异步编程入门实例
2015/04/24 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
python生成随机红包的实例写法
2019/09/02 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
财务科长个人对照检查材料
2014/09/18 职场文书
同学会邀请函模板
2015/01/30 职场文书
居住证明范文
2015/06/17 职场文书
2016春季幼儿园大班开学寄语
2015/12/03 职场文书