深入理解python中sort()与sorted()的区别


Posted in Python onAugust 29, 2018

Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列

一,最简单的排序

1.使用sort排序

my_list = [3, 5, 1, 4, 2]
my_list.sort()
print (my_list)
#输出: [1, 2, 3, 4, 5]

使用sort()方法对list排序会修改list本身,不会返回新list.

sort()不能对dict字典进行排序

2.使用sorted()排序

my_list = [3, 5, 1, 4, 2]
result = sorted(my_list)
print (result)
#输出: [1, 2, 3, 4, 5]

my_dict = {"a":"1", "c":"3", "b":"2"}
result = sorted(my_dict)
print (result)
#输出: ['a', 'b', 'c']

sorted()会生成一个新的列表或字典对象,对dict排序默认会按照dict的key值进行排序,最后返回的结果是一个对key值排序好的list

二,key参数

从python2.4开始,list.sort()和sorted()函数增加了key参数来指定一个函数,此函数将在每个元素比较前被调用

key参数的值为一个函数,此函数只有一个参数且返回一个值用来进行比较。这个技术是快速的因为key指定的函数将准确地对每个元素调用。

1.对复杂的元组排序

student_tuples = [
    ('john', 'A', 15),
    ('jane', 'B', 12),
    ('dave', 'B', 10),
]
result = sorted(student_tuples, key=lambda student: student[2])
print (result)
#输出 [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

以上可以看出排序是按照10, 12, 15值进行排序的,因为函数lambda student:student[2]返回的值分别是10, 12, 15。

所以就用函数返回的值进行比较;key=15 ,key=12,key=10根据这些返回值进行比较;

lambda student:student[2] 等价于
def f(student):
  return student[2]

2.根据字典的value排序

默认sorted是对dict的key排序的,如果要根据dict的value排序就需要指定key参数了

my_dict = {"a":"2", "c":"5", "b":"1"}
result = sorted(my_dict)
print (result)
#默认对dict排序,不指定key参数,会默认对dict的key值进行比较排序
#result输出: ['a', 'b', 'c']
result2 = sorted(my_dict, key=lambda x:my_dict[x])
print (result2)
#指定key参数,根据dict的value排序
#result2输出:['b', 'a', 'c']

扩展用法:

1.Key Function:

从Python2.4开始,list.sort() 和 sorted() 都增加了一个 ‘key' 参数用来在进行比较之前指定每个列表元素上要调用的函数。

例如:

区分大小写的字符串比较排序:

>>> sorted("This is a test string from Andrew".split(), key=str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

key应该是一个函数,其接收一个参数,并且返回一个用于排序依据的key。其执行效率很高,因为对于输入记录key function能够准确的被调用。

对于复杂的对象,使用对象的下标作为key。

例如:

>>> student_tuples = [
...   ('john', 'A', 15),
...   ('jane', 'B', 12),
...   ('dave', 'B', 10),
... ]
>>> sorted(student_tuples, key=lambda student: student[2])  # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

使用对象的属性进行操作:

例如:

>>> class Student:
...   def __init__(self, name, grade, age):
...     self.name = name
...     self.grade = grade
...     self.age = age
...   def __repr__(self):
...     return repr((self.name, self.grade, self.age))
>>>
>>> student_objects = [
...   Student('john', 'A', 15),
...   Student('jane', 'B', 12),
...   Student('dave', 'B', 10),
... ]
>>> sorted(student_objects, key=lambda student: student.age)  # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

以上所述是小编给大家介绍的python中sort()与sorted()的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
为Python程序添加图形化界面的教程
Apr 29 Python
剖析Django中模版标签的解析与参数传递
Jul 21 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
Apr 25 Python
python利用requests库进行接口测试的方法详解
Jul 06 Python
PYTHON绘制雷达图代码实例
Oct 15 Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
Jan 07 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
Python发送邮件实现基础解析
Aug 14 Python
Pytorch 图像变换函数集合小结
Feb 01 Python
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 #Python
Python读写zip压缩文件的方法
Aug 29 #Python
使用python生成杨辉三角形的示例代码
Aug 29 #Python
Python实现查询某个目录下修改时间最新的文件示例
Aug 29 #Python
有关Python的22个编程技巧
Aug 29 #Python
Python实现多线程的两种方式分析
Aug 29 #Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 #Python
You might like
用PHP制作静态网站的模板框架(一)
2006/10/09 PHP
PHP详解ASCII码对照表与字符转换
2011/12/05 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
php目录遍历函数opendir用法实例
2014/11/20 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
php+mysql数据库实现无限分类的方法
2014/12/12 PHP
php实现网站留言板功能
2015/11/04 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
Expandable "Detail" Table Rows
2007/08/29 Javascript
javascript radio 联动效果
2009/03/04 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
2020/08/20 Javascript
Python简单实现Base64编码和解码的方法
2017/04/29 Python
python系列 文件操作的代码
2019/10/06 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
如何通过python检查文件是否被占用
2020/12/18 Python
python 通过exifread读取照片信息
2020/12/24 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
给老婆的道歉信
2015/01/20 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python