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读写文件操作示例程序
Dec 02 Python
python静态方法实例
Jan 14 Python
Python编程之多态用法实例详解
May 19 Python
python根据京东商品url获取产品价格
Aug 09 Python
用Pygal绘制直方图代码示例
Dec 07 Python
Python3 中文文件读写方法
Jan 23 Python
Python实现Kmeans聚类算法
Jun 10 Python
Python数据结构之图的应用示例
May 11 Python
Python基于最小二乘法实现曲线拟合示例
Jun 14 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
Python如何通过Flask-Mail发送电子邮件
Jan 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字符串替换函数substr_replace()用法实例
2015/03/17 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
2011/09/02 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
Python生成一个迭代器的实操方法
2019/06/18 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
html5摇一摇代码优化包括DeviceMotionEvent等等
2014/09/01 HTML / CSS
你们项目是如何进行变更控制的
2015/08/26 面试题
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
药学职务聘任书
2014/03/29 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
《搭石》教学反思
2016/02/18 职场文书
导游词之日本富士山
2020/01/06 职场文书
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js
java代码实现空间切割
2022/01/18 Java/Android