文章目录

  • 前言
  • Python内置数据类型性能分析
    • timeit模块
    • 列表内置方法性能分析
    • 列表内置操作的时间复杂度
    • 字典内置操作时间复杂度
  • 最后

前言

大家前面学过Python基础知识的都知道,Python为我们封装了列表、字典等高级数据类型,并且他们都带有一系列增、删、改、除的方法,让我们能够很方便的处理一些问题。以目前我们这些人的技术水平可能觉得这些东西就够了,照样能够快速的解决很多的问题。可是随着知识的深入,随着问题不断地变难,很多时候我们去用列表、字典这些高级数据类型来解决问题得话可能显得有点力不从心。世界上没有无用的知识,也没有无用的的人!其实你通过深入的学习之后会发现,数据结构这门课程是独立于语言之外的,管他是用什么语言实现,里面的道道都是一样的,至于用Python这门语言来实现的话,他是否会简单一些,这还有待我们深入的去学习和了解。

Python内置数据类型性能分析

下面我们将结合Python中的timeit模块来深入的分析一下,Python中内置的列表、字典等数据类型的性能,对此你可能会对数据结构的深入学习有更强的期待。

timeit模块

timeit模块可以用来测试一小段Python代码的执行速度。
Python中timeit模块定义了接受两个参数的Timer类。两个参数都是字符串,第一个参数是你要计时的语句或者函数,第二个参数是为第一个参数构建环境的导入语句,也就是第一个参数所在的地方,一般是import语句“from __ main __ inport …”。

class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>)

总结来说:
Timer是测量小段代码执行速度的类。
stmt参数是要测试的代码语句(statment);
setup参数是运行代码时需要的设置;
timer参数是一个定时器函数,与平台有关。
timeit.Timer.timeit(number=1000000)
Timer类中测试语句执行速度的对象方法。number参数是测试代码时的测试次数,默认为100万次。方法返回执行代码的平均耗时,一个浮点类型的秒数。

列表内置方法性能分析

下面使用timeit模块中的Timer类来试验一下列表中的各种方法类型的运行时间,找出时间复杂度最低的方法:

from timeit import Timer
def t1():li = []for i in range(10000):li.append(i)def t2():li = []for i in range(10000):li = li + [i]# li += [i]def t3():li = [i for i in range(10000)]def t4():li = list(range(10000))def t5():li = []for i in range(10000):li.extend([i])def t7():li = []for i in range(10000):li.insert(0, i)timer1 = Timer("t1()", "from __main__ import t1")
print("append:", timer1.timeit(1000))timer2 = Timer("t2()", "from __main__ import t2")
print("+:", timer2.timeit(1000))timer3 = Timer("t3()", "from __main__ import t3")
print("[i for i in range]:", timer3.timeit(1000))timer4 = Timer("t4()", "from __main__ import t4")
print("list(range()):", timer4.timeit(1000))timer5 = Timer("t5()", "from __main__ import t5")
print("extend:", timer5.timeit(1000))timer6 = Timer("t6()", "from __main__ import t6")
print("append", timer6.timeit(1000))timer7 = Timer("t7()", "from __main__ import t7")
print("insert(0)", timer7.timeit(1000))


通过以上试验可以发现使用列表生成器的代码的时间复杂度是比较低的,其中+这个操作的时间复杂度较高,原因在于在做+操作时,每两个列表元素相加都会生成第三个列表来储存相加好了的列表元素,加一次就在内存中生成一个列表,如此下来会造成大量的内存得不到释放,严重占用内存空间,且每一步的操作都很费时。

列表内置操作的时间复杂度

列表内置操作的时间复杂度如下图所示:

字典内置操作时间复杂度

列表内置操作的时间复杂度如下图所示:

最后

某些代码和图片来源于我学习的资料。讲到这里或许大家还是不明白我们为什么要学数据结构,更高级的数据结构有什么好处等一系列问题。

我们为了解决问题,需要将数据保存下来,然后根据数据的存储方式来设计算法实现进行处理,那么数据的存储方式不同就会导致需要不同的算法进行处理。我们希望算法解决问题的效率越快越好,于是我们就需要考虑数据究竟如何保存的问题,这就是数据结构。

其实看到这里,列表字典本身就是一种数据结构,只不过是Python封装好了的,其他的高级数据结构类型则需要我们自己去实现,实现的过程就是我们对计算机知识更深入的了解!

Python封装了很好用的结构和方法,为啥还要学数据结构?相关推荐

  1. python封装:隐藏对象中的属性或方法(三分钟读懂)

    封装:隐藏对象中的属性或方法 隐藏对象中的属性 隐藏:- 将对象的属性名,修改为一个外部不知道的名字 我们使用时,有特殊方法来处理获取(修改)对象中的属性 获取(修改)对象中的属性 需要提供一个get ...

  2. python优先级排序_Python实现优先级队列结构的方法详解

    最简单的实现一个队列至少满足2个方法,put和get. 借助最小堆来实现. 这里按"值越大优先级越高"的顺序. #coding=utf-8 from heapq import he ...

  3. python卸载包很慢_Python卸载模块的方法汇总

    本文给大家汇总介绍了3种卸载Python已安装模块的方法,推荐大家使用easy_install或者pip的方式来进行,简单方便 easy_install 卸载 通过easy_install 安装的模块 ...

  4. python封装sql脚本 github_Github 大牛封装 Python 代码,实现自动发送邮件只需三行代码...

    原标题:Github 大牛封装 Python 代码,实现自动发送邮件只需三行代码 在运维开发中,使用 Python 发送邮件是一个非常常见的应用场景.今天一起来探讨一下,GitHub 的大牛门是如何使 ...

  5. python源码提取_Python提取Linux内核源代码的目录结构实现方法

    今天用Python提取了Linux内核源代码的目录树结构,没有怎么写过脚本程序,我居然折腾了2个小时,先是如何枚举出给定目录下的所有文件和文件夹,os.walk可以实现列举,但是os.walk是只给出 ...

  6. python封装方法有几种_Python中的封装有什么作用?

    展开全部 日常生活中可2113以看到很多的汽车5261,汽车包括车轮.发动机.车架等零4102部件.可以在车架1653上安装车轮,然后安装发动机,最后安装其他零件,刷漆.就形成了汽车.这个过程,是把各 ...

  7. python利器怎么编程-bluepy 一款python封装的BLE利器简单介绍

    1.bluepy 简介 bluepy 是github上一个很好的蓝牙开源项目,其地址在 LINK-1, 其主要功能是用python实现linux上BLE的接口. This is a project t ...

  8. 武汉python培训哪一家好一些-一家靠谱的武汉Python培训机构很重要

    一家靠谱的武汉Python培训机构很重要 时间:2018-01-08 16:05:52 | 来源:千锋教育 | 作者:颜老师 Python的设计具有很强的可读性,相比其他语言经常使用英文关键字和一些标 ...

  9. python封装概念_Python封装及解构

    python封装及解构 Python的封装与其他语言的封装箱不同,python中没有装箱的概念,一切皆对象 将多个值使用逗号进行分割,本质上是返回元组 In [1]: a = 1,2 In [2]: ...

最新文章

  1. 《Windows网络与通信程序设计(第3版)》——1.4 网络应用程序设计基础
  2. python 超时重试方法
  3. C++:21---仿函数
  4. androidstudio自带git用法_Android Studio的git功能的使用介绍
  5. 联想小新打印机M7268W固件升级步骤
  6. base64图片解码与编码
  7. chrome翻译插件之谷歌翻译
  8. js 公历日期转农历带节假日
  9. 为什么都说Dubbo不适合传输大文件?Dubbo支持的协议
  10. 从立项到在steam平台上发布游戏,所要经历的流程。【esyi杂谈】
  11. 袁斌:极空间家庭私有云,您的数字资产大管家
  12. 奥义多媒体破解后的恢复③
  13. [电路]2-独立源和受控源
  14. 百度文库不能下载解决方案
  15. 操作系统基本服务和用户接口
  16. 印刷机软件测试,印刷生产流程标准化测试方案——测试方法
  17. 我们基于kaldi开发的嵌入式语音识别系统升级成深度学习啦
  18. 2018年Android版本分布(市场占有率、市场份额)统计
  19. 学习笔记--八数码问题
  20. Linux无故关机,重启后报错Generating /run/initramfs/rdsosreport.txt

热门文章

  1. postman 发送请求时一直返回1,解决方法
  2. 麒麟子Cocos Creator 3D研究笔记四:天空盒动态更换与IBL效果
  3. vue轮播图实现点击图片跳转到外部链接
  4. 计算机应用笔试题及答案,计算机应用基础笔试试题及答案
  5. 性能工具gperftools使用说明
  6. Facebook、微信团队、Twitter、微软开源软件列表一览
  7. go学习 --- 继承
  8. python - dtype
  9. el-table 设置一列的颜色
  10. bzoj1207【HNOI2004】打鼹鼠