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 20 Python
python进阶教程之函数参数的多种传递方法
Aug 30 Python
Python用sndhdr模块识别音频格式详解
Jan 11 Python
Python实现定时执行任务的三种方式简单示例
Mar 30 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 Python
python3.6+django2.0+mysql搭建网站过程详解
Jul 24 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 Python
Python Socket TCP双端聊天功能实现过程详解
Jun 15 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 06 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 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网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
深入分析PHP引用(&amp;)
2014/09/04 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
php字符串函数学习之substr()
2015/03/27 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
javascript与CSS复习(二)
2010/06/29 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
2013/12/24 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
python urllib爬取百度云连接的实例代码
2017/06/19 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
python3实现弹弹球小游戏
2019/11/25 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
Python中实现输入一个整数的案例
2020/05/03 Python
python2和python3哪个使用率高
2020/06/23 Python
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
2015年大学生社会实践评语
2015/03/26 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书