深入理解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中logging模块的用法实例
Sep 29 Python
python类继承用法实例分析
Oct 10 Python
在Python的Django框架中创建语言文件
Jul 27 Python
Ubuntu下安装PyV8
Mar 13 Python
Python写的一个定时重跑获取数据库数据
Dec 28 Python
ubuntu环境下python虚拟环境的安装过程
Jan 07 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
linux安装python修改默认python版本方法
Mar 31 Python
python通过实例讲解反射机制
Oct 17 Python
python pprint模块中print()和pprint()两者的区别
Feb 10 Python
python日期与时间戳的各种转换示例
Feb 12 Python
python 3.8.3 安装配置图文教程
May 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
使javascript也能包含文件
2006/10/26 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
利用JS实现数字增长
2016/07/28 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
Python如何获取系统iops示例代码
2016/09/06 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
python 装饰器的使用示例
2020/10/10 Python
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
班级入场式解说词
2014/02/01 职场文书
合伙购房协议样本
2014/10/06 职场文书
2015年保送生自荐信
2015/03/24 职场文书
技术入股合作协议书
2016/03/21 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
HAM-2000摩机图
2021/04/22 无线电
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript