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中的数据存储到系统本地的简单方法
Apr 11 Python
python获取当前时间对应unix时间戳的方法
May 15 Python
Python回调函数用法实例详解
Jul 02 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
python版本的读写锁操作方法
Apr 25 Python
python3 遍历删除特定后缀名文件的方法
Apr 23 Python
pyQt4实现俄罗斯方块游戏
Jun 26 Python
pygame游戏之旅 添加游戏暂停功能
Nov 21 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
python2 对excel表格操作完整示例
Feb 23 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
Feb 29 Python
python标准库OS模块函数列表与实例全解
Mar 10 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
PHP 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
PHP设置头信息及取得返回头信息的方法
2016/01/25 PHP
PHP模板引擎Smarty中的保留变量用法分析
2016/04/11 PHP
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
Textarea与懒惰渲染实现代码
2012/01/04 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
python实现超简单端口转发的方法
2015/03/13 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
python开头的coding设置方法
2019/08/08 Python
python dataframe NaN处理方式
2019/12/26 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
应届生幼儿园求职信
2013/11/12 职场文书
农救科工作职责
2013/11/27 职场文书
优秀团队获奖感言
2014/02/19 职场文书
校园歌咏比赛主持词
2014/03/18 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
档案保密承诺书
2014/06/03 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2014年班主任工作总结
2014/11/08 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
详解CSS3浏览器兼容
2022/12/24 HTML / CSS