深入理解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 25 Python
Python中datetime模块参考手册
Jan 13 Python
Python pandas常用函数详解
Feb 07 Python
利用python的socket发送http(s)请求方法示例
May 07 Python
win7+Python3.5下scrapy的安装方法
Jul 31 Python
使用memory_profiler监测python代码运行时内存消耗方法
Dec 03 Python
Linux 修改Python命令的方法示例
Dec 03 Python
计算机二级python学习教程(3) python语言基本数据类型
May 16 Python
python多线程案例之多任务copy文件完整实例
Oct 29 Python
如何使用python切换hosts文件
Apr 29 Python
Python中socket网络通信是干嘛的
May 27 Python
python开发一款翻译工具
Oct 10 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 无限分类的树类代码
2009/12/03 PHP
解析smarty模板中类似for的功能实现
2013/06/18 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
二行代码解决全部网页木马
2008/03/28 Javascript
基于JQuery的6个Tab选项卡插件
2010/09/03 Javascript
js 上传图片预览问题
2010/12/06 Javascript
关于JS字符串函数String.replace()
2013/04/07 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
js尾调用优化的实现
2019/05/23 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
js实现3D旋转效果
2020/08/18 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
js实现抽奖功能
2020/11/24 Javascript
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
python实现自动重启本程序的方法
2015/07/09 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
Flask配置Cors跨域的实现
2019/07/12 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
优秀员工自荐书范文
2013/12/08 职场文书
元旦晚会主持词
2014/03/24 职场文书
医师定期考核实施方案
2014/05/07 职场文书
学习礼仪心得体会
2014/09/01 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
邀请函格式范文
2015/02/02 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP
python Django框架快速入门教程(后台管理)
2021/07/21 Python
用Python可视化新冠疫情数据
2022/01/18 Python
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers