深入理解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脚本实现代码行数统计代码分享
Mar 10 Python
Python Property属性的2种用法
Jun 21 Python
深入解析Python编程中JSON模块的使用
Oct 15 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
python3实现ftp服务功能(客户端)
Mar 24 Python
python中os和sys模块的区别与常用方法总结
Nov 14 Python
深入理解Python单元测试unittest的使用示例
Nov 18 Python
Pandas 对Dataframe结构排序的实现方法
Apr 10 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
Python 经典算法100及解析(小结)
Sep 13 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 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实现短域名互转
2013/07/05 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
Zend Framework+smarty用法实例详解
2016/03/19 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
Canvas实现放射线动画效果
2017/02/15 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
遗传算法之Python实现代码
2017/10/10 Python
理解python中生成器用法
2017/12/20 Python
python3利用tcp实现文件夹远程传输
2018/07/28 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
Python pip配置国内源的方法
2020/02/14 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
2020/04/24 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
致100米运动员广播稿
2014/02/14 职场文书
中秋节主持词
2014/04/02 职场文书
计算机毕业大学生求职信
2014/06/26 职场文书
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android
PostgreSQL聚合函数介绍以及分组和排序
2022/04/12 PostgreSQL