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中使用mysql数据库详细介绍
Mar 27 Python
关于python pyqt5安装失败问题的解决方法
Aug 08 Python
Python多层装饰器用法实例分析
Feb 09 Python
python删除服务器文件代码示例
Feb 09 Python
用tensorflow构建线性回归模型的示例代码
Mar 05 Python
Python实现在某个数组中查找一个值的算法示例
Jun 27 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
python+jinja2实现接口数据批量生成工具
Aug 28 Python
浅谈tensorflow之内存暴涨问题
Feb 05 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
Python 实现简单的客户端认证
Jul 29 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日历制作代码分享
2014/01/20 PHP
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
canvas实现钟表效果
2017/02/13 Javascript
js实现九宫格拼图小游戏
2017/02/13 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
详解Python中的join()函数的用法
2015/04/07 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
Python装饰器用法实例总结
2018/02/07 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
2019/06/28 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
Python字符串格式化输出代码实例
2019/11/22 Python
详解python 中in 的 用法
2019/12/12 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
简短大学毕业感言
2014/01/18 职场文书
网上蛋糕店创业计划书
2014/01/24 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
什么是就业协议书
2014/04/17 职场文书
安全承诺书格式
2014/05/21 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL