深入理解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的Tornado框架异步编程入门实例
Apr 24 Python
在Python的Tornado框架中实现简单的在线代理的教程
May 02 Python
python导入时小括号大作用
Jan 10 Python
多版本Python共存的配置方法
May 22 Python
TensorFlow实现MLP多层感知机模型
Mar 09 Python
pytorch + visdom CNN处理自建图片数据集的方法
Jun 04 Python
windows下安装Python虚拟环境virtualenvwrapper-win
Jun 14 Python
Python3 中sorted() 函数的用法
Mar 24 Python
使用Python对Dicom文件进行读取与写入的实现
Apr 20 Python
用python实现名片管理系统
Jun 18 Python
python非标准时间的转换
Jul 25 Python
Python装饰器详细介绍
Mar 25 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语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
jQuery的学习步骤
2011/02/23 Javascript
为原生js Array增加each方法
2012/04/07 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
node.js中的fs.createWriteStream方法使用说明
2014/12/17 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
在vue中通过axios异步使用echarts的方法
2018/01/13 Javascript
JavaScript多种图形实现代码实例
2020/06/28 Javascript
python中安装模块包版本冲突问题的解决
2017/05/02 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
python and or用法详解
2019/06/26 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
关于python中导入文件到list的问题
2020/10/31 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
Canvas与Image互相转换示例代码
2013/08/09 HTML / CSS
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
大学毕业生通用自我评价
2014/01/05 职场文书
大家检讨书5000字
2014/02/03 职场文书
2014年计生标语
2014/06/23 职场文书
垃圾桶标语
2014/06/24 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
2015初中教导处工作总结
2015/07/21 职场文书
导游词之贵州百里杜鹃
2019/10/29 职场文书
使用feign服务调用添加Header参数
2021/06/23 Java/Android