深入理解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 splitlines使用技巧
Sep 06 Python
Python中自定义函数的教程
Apr 27 Python
JSONLINT:python的json数据验证库实例解析
Nov 28 Python
基于数据归一化以及Python实现方式
Jul 11 Python
Python面向对象基础入门之编码细节与注意事项
Dec 11 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
Python3常见函数range()用法详解
Dec 30 Python
详解字符串在Python内部是如何省内存的
Feb 03 Python
python能否java成为主流语言吗
Jun 22 Python
详解用Python爬虫获取百度企业信用中企业基本信息
Jul 02 Python
Django前后端分离csrf token获取方式
Dec 25 Python
Python中的程序流程控制语句
Feb 24 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
php mssql 分页SQL语句优化 持续影响
2009/04/26 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
js 与 php 通过json数据进行通讯示例
2014/03/26 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
微信JS接口大全
2016/08/25 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
微信小程序开发中的疑问解答汇总
2017/07/03 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
解决vue项目 build之后资源文件找不到的问题
2020/09/12 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
对Python定时任务的启动和停止方法详解
2019/02/19 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
python如何删除文件中重复的字段
2019/07/16 Python
python文字转语音实现过程解析
2019/11/12 Python
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
优秀毕业生求职推荐信范文
2013/11/21 职场文书
园林技术个人的自我评价
2014/01/08 职场文书
经济管理自荐书
2014/06/09 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
公司财务人员岗位职责
2015/04/14 职场文书