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程序中使用SQLAlchemy时出现乱码的解决方案
Apr 24 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
在Python中使用mechanize模块模拟浏览器功能
May 05 Python
python求解水仙花数的方法
May 11 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
python使用递归的方式建立二叉树
Jul 03 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
Django中如何使用sass的方法步骤
Jul 09 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
Mar 10 Python
浅谈python 中的 type(), dtype(), astype()的区别
Apr 09 Python
numpy array找出符合条件的数并赋值的示例代码
Jun 01 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 面试碰到过的问题 在此做下记录
2011/06/09 PHP
pdo中使用参数化查询sql
2011/08/11 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
对PHP PDO的一些认识小结
2015/01/23 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
python3 线性回归验证方法
2019/07/09 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
利用SVG和CSS3来实现一个炫酷的边框动画
2015/07/22 HTML / CSS
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
生产部主管岗位职责
2014/01/06 职场文书
优秀志愿者事迹材料
2014/02/03 职场文书
《问银河》教学反思
2014/02/19 职场文书
教师个人自我评价范文
2014/04/13 职场文书
法制宣传标语集锦
2014/06/25 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
单位未婚证明范本
2014/11/25 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
《颐和园》教学反思
2016/02/19 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
Python基于百度API识别并提取图片中文字
2021/06/27 Python
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技