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 RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
Python赋值语句后逗号的作用分析
Jun 08 Python
用python做一个搜索引擎(Pylucene)的实例代码
Jul 05 Python
Python生成数字图片代码分享
Oct 31 Python
python如何通过实例方法名字调用方法
Mar 21 Python
Python 实现字符串中指定位置插入一个字符
May 02 Python
Python正则表达式和re库知识点总结
Feb 11 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
Apr 22 Python
基于selenium及python实现下拉选项定位select
Jul 22 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 Python
python实现KNN近邻算法
Dec 30 Python
python爬虫如何解决图片验证码
Feb 14 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
PHP操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
10个实用的PHP代码片段
2011/09/02 PHP
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
php简单图像创建入门实例
2015/06/10 PHP
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
js从Cookies里面取值的简单实现
2014/06/30 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
vue实现点击按钮下载文件功能
2019/10/11 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
python日志记录模块实例及改进
2017/02/12 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
python连接mongodb密码认证实例
2018/10/16 Python
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
Python如何实现动态数组
2019/11/02 Python
解决django FileFIELD的编码问题
2020/03/30 Python
Python request操作步骤及代码实例
2020/04/13 Python
使用SQLAlchemy操作数据库表过程解析
2020/06/10 Python
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
迟到检讨书500字
2014/02/05 职场文书
爱情寄语大全
2014/04/09 职场文书
物业工程部岗位职责
2015/02/11 职场文书
导游词范文
2015/02/13 职场文书
感恩节寄语2015
2015/03/24 职场文书
责任书格式
2019/04/18 职场文书
python requests模块的使用示例
2021/04/07 Python