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实现2014火车票查询代码分享
Jan 10 Python
Django与遗留的数据库整合的方法指南
Jul 24 Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 Python
flask框架视图函数用法示例
Jul 19 Python
详解flask表单提交的两种方式
Jul 21 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
Jun 21 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
Jun 24 Python
python使用mitmproxy抓取浏览器请求的方法
Jul 02 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
Pytorch训练过程出现nan的解决方式
Jan 02 Python
Ubuntu中配置TensorFlow使用环境的方法
Apr 21 Python
Python入门之使用pandas分析excel数据
May 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
PHP 透明水印生成代码
2012/08/27 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
php获取表单中多个同名input元素的值
2014/03/20 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
2017/12/05 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
Python简单获取自身外网IP的方法
2016/09/18 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
对Python之gzip文件读写的方法详解
2019/02/08 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
Python流程控制 if else实现解析
2019/09/02 Python
Python实现元素等待代码实例
2019/11/11 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
Python如何实现定时器功能
2020/05/28 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
精伦电子Java笔试题
2013/01/16 面试题
单位门卫岗位职责
2013/12/20 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
2014年质检工作总结
2014/11/26 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
Python中的套接字编程是什么?
2021/06/21 Python
详细聊聊vue中组件的props属性
2021/11/02 Vue.js