深入理解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执行子进程实现进程间通信的方法
Jun 02 Python
使用Python对Csv文件操作实例代码
May 12 Python
python利用lxml读写xml格式的文件
Aug 10 Python
Python实现进程同步和通信的方法
Jan 02 Python
python监控进程脚本
Apr 12 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
Sep 04 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
pyCharm 实现关闭代码检查
Jun 09 Python
PyQt5的QWebEngineView使用示例
Oct 20 Python
python 下载m3u8视频的示例代码
Nov 11 Python
python实现定时发送邮件
Dec 23 Python
python 爬取豆瓣网页的示例
Apr 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
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
js replace替换所有匹配的字符串
2014/02/13 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
Javascript实现数组中的元素上下移动
2017/04/28 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
vue swipe自定义组件实现轮播效果
2019/07/03 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
Javascript查看大图功能代码实现
2020/05/07 Javascript
在Vue中使用antv的示例代码
2020/06/29 Javascript
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
flask框架蓝图和子域名配置详解
2020/01/25 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
python 实现波浪滤镜特效
2020/12/02 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
2013/01/23 HTML / CSS
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
《乡愁》教学反思
2014/02/18 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
2014年英语工作总结
2014/12/20 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
消防验收申请报告
2015/05/15 职场文书
小学教育见习总结
2015/06/23 职场文书
聊聊Python String型列表求最值的问题
2022/01/18 Python