深入理解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中操作时间之tzset()方法的使用教程
May 22 Python
windows下ipython的安装与使用详解
Oct 20 Python
Python 实现链表实例代码
Apr 07 Python
Python中Numpy mat的使用详解
May 24 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
Aug 13 Python
使用python实现kNN分类算法
Oct 16 Python
Python加密模块的hashlib,hmac模块使用解析
Jan 02 Python
python机器学习库xgboost的使用
Jan 20 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
matplotlib基础绘图命令之errorbar的使用
Aug 13 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 15 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 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中heredoc与nowdoc介绍
2014/12/25 PHP
php操作redis缓存方法分享
2015/06/03 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
ppk谈JavaScript style属性
2008/10/10 Javascript
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
JavaScript 数组详解
2013/10/10 Javascript
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
Web 开发中Ajax的Session 超时处理方法
2017/01/19 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
python简单程序读取串口信息的方法
2015/03/13 Python
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
Python代码实现http/https代理服务器的脚本
2019/08/12 Python
python pymysql库的常用操作
2020/10/16 Python
纯css3显示隐藏一个div特效的具体实现
2014/02/10 HTML / CSS
HTML5注册页面示例代码
2014/03/27 HTML / CSS
10条PHP编程习惯
2014/05/26 面试题
护士个人简历自荐信
2013/10/18 职场文书
兼职学生的自我评价
2013/11/24 职场文书
师范院校学生自荐信范文
2013/12/27 职场文书
银行委托书范本
2014/04/04 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
片区教研活动总结
2014/07/02 职场文书
自主招生学校推荐信
2014/09/26 职场文书
鸡毛信观后感
2015/06/11 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
配置nginx负载均衡
2022/05/06 Servers