深入理解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实现LRU算法的2种方法
Jun 24 Python
Python编写简单的HTML页面合并脚本
Jul 11 Python
Tesserocr库的正确安装方式
Oct 19 Python
pandas 根据列的值选取所有行的示例
Nov 07 Python
详解python调用cmd命令三种方法
Jul 08 Python
8种用Python实现线性回归的方法对比详解
Jul 10 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
python 3.7.4 安装 opencv的教程
Oct 10 Python
Python turtle画图库&&画姓名实例
Jan 19 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
Apr 09 Python
python TCP包注入方式
May 05 Python
Python数据分析入门之数据读取与存储
May 13 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+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
Yii框架上传图片用法总结
2016/03/28 PHP
[原创]图片分页查看
2006/08/28 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
详解使用angular的HttpClient搭配rxjs
2017/09/01 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python数据结构之二叉树的遍历实例
2014/04/29 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
python微信公众号之关键词自动回复
2018/06/15 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
浅析Python 序列化与反序列化
2020/08/05 Python
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
优秀广告词大全
2014/03/19 职场文书
创业培训计划书
2014/05/03 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
地道战观后感400字
2015/06/04 职场文书
python 算法题——快乐数的多种解法
2021/05/27 Python
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python