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的Django框架中自定义模版标签的示例
Jul 20 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
Python遍历文件夹和读写文件的实现方法
May 10 Python
Python实现可自定义大小的截屏功能
Jan 20 Python
Python通过属性手段实现只允许调用一次的示例讲解
Apr 21 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
python3使用腾讯企业邮箱发送邮件的实例
Jun 28 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
python无序链表删除重复项的方法
Jan 17 Python
Python 实现向word(docx)中输出
Feb 13 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
python os.listdir()乱码解决方案
Jan 31 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实现window平台的checkdnsrr函数
2015/05/27 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
javascript 清除输入框中的数据
2009/04/13 Javascript
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
Vue动态生成表格的行和列
2019/07/18 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
2020/06/05 Javascript
antd配置config-overrides.js文件的操作
2020/10/31 Javascript
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
Python图像灰度变换及图像数组操作
2016/01/27 Python
对json字符串与python字符串的不同之处详解
2018/12/19 Python
python的sorted用法详解
2019/06/25 Python
django中forms组件的使用与注意
2019/07/08 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
pandas factorize实现将字符串特征转化为数字特征
2019/12/19 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
物流业务员岗位职责
2014/02/08 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
狮子林导游词
2015/02/03 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
千万级用户系统SQL调优实战分享
2022/03/03 MySQL
Python何绘制带有背景色块的折线图
2022/04/23 Python