深入理解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 获取本机ip地址的两个方法
Feb 25 Python
python正则表达式抓取成语网站
Nov 20 Python
Python中使用支持向量机SVM实践
Dec 27 Python
Python中if elif else及缩进的使用简述
May 31 Python
对python3标准库httpclient的使用详解
Dec 18 Python
python 随机生成10位数密码的实现代码
Jun 27 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
Python Numpy 控制台完全输出ndarray的实现
Feb 19 Python
python如何安装下载后的模块
Jul 03 Python
python selenium xpath定位操作
Sep 01 Python
Python基础知识之变量的详解
Apr 14 Python
Python 可迭代对象 iterable的具体使用
Aug 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获取服务器信息的实现代码
2013/02/04 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
探索Emberjs制作一个简单的Todo应用
2012/11/07 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
javascript中取前n天日期的两种方法分享
2014/01/26 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
python开发之str.format()用法实例分析
2016/02/22 Python
Python程序运行原理图文解析
2018/02/10 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
python asyncio 协程库的使用
2021/01/21 Python
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
一套Delphi的笔试题一
2016/02/14 面试题
护士的岗位职责
2013/12/04 职场文书
入党思想汇报
2014/01/05 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
学习焦裕禄先进事迹心得体会
2016/01/23 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
php7中停止php-fpm服务的方法详解
2021/05/09 PHP
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python