点击上方蓝色“菜鸟学Python”,选择“设为星标”

带你一起学Python!

周围越来越多的人开始学习Python,Python确实入门容易,但是精通很难。因为Python 非常灵活,对于同一件事情Python有很多种解法,技巧性非常强。

今天小编整理了一篇收罗Python里面关于数据结构的各种奇淫技巧大全,就连玩Python的老鸟都值得一读,我们一起来看一下!

1.Dict型数据结构

字典(Dict),映射(Map)和哈希表(Hash Table)是Python里面的核心数据结构,类似的这样的数据结构几乎在所有的主流的编程语言比如Java ,C++里面也有它的身影,都是非常重要的知识点。

1).普通字典

2).顺序字典

上面的只是字典的最最最基本的用法,真正在生成环境的时候,我们很多时候需要保持需要插入的顺序,这个时候就要用到OrderedDict。

3).缺省字典

如果你在存储数据的时候,希望有默认的值在里面,那么你就应该用defaultdict,它在很多场景下面非常巧妙的用处,可以节省很多代码。

4).链式映射

当我们遇到复杂的数据结构的时候,比如需要把多个字典进行合并成一个单一的字典,进行查找搜寻就需要用ChainMap。

2.数组型数据结构

array数组几乎所有的语言都有,记得大学的时候学C语言,数组是最开始接触的数据结构,数组都有一个下标,然后都是连续分配内存的。

因为数组将信息存储在相邻的内存块中,所以被认为是连续的数据结构,很多静态语言里面,都是要强制初始化数组的类型以及长度,如果数组越界会出现寻址到乱的数据,那么Python的数组是怎么表示的呢?

1).list可变动态数组

2). 不可变数组

跟list一样,但是tuple对象是不可变的,不能修改,删除

3).类似C语言的array

Python里面有一个 array模块,可以创建跟C语言很类似的数组,array.array用法跟list很像,唯一的区别在于它只能存储同样地数据类型的数据。它所占的存储空间的大小就是数据的大小。

4).字符数组

Python 3.x使用str对象将文本数据存储为Unicode字符的不可变序列。这意味着 str型字符串数组是不可变的字符数组。

3.自定的类数据结构

当你的数据结构更复杂的时候,你就会构造类来封装你的数据结构,Python中用类来封装有很多方法,我们下面一一给大家讲解。

1).基本的类封装

Car这个汽车类来封装汽车的数据,比如颜色,行驶的公里数,是否自动挡,然后我们就可以对这个Car类进行初始化它的对象car1,car2,通过__init__函数来初始化对象。

2).数据类

数据类是在Python 3.7才开始有的。是一个新的模块转为数据存储的类,使用起来非常方便,可以让你的对象实例将立即获得一些有用的功能,从而节省了一些键入和手动实现的工作:

  • 定义实例变量的语法较短,无需实现该.__init__()方法。

  • 数据类的实例通过自动生成的.__repr__()方法自动获得漂亮的字符串表示形式。

  • 实例变量接受类型注释,从而使数据类在一定程度上能够自我记录。

3).命名元组

nametuple是Python 里面短小精悍的类,它是collection模块里面的一个库函数,对于封装短小的类非常有用。让我们可以像访问属性一样去访问类的内容。使用的效率更高更接近底层的数组的效率,而且代码易读。

4).序列化的C结构

看到struct这么英文单词,大家应该并不陌生,因为c/c++中就有struct,在那里struct叫做结构体。在Python中也使用struct,Python正是使用struct模块执行Python值和C结构体之间的转换,从而形成Python字节对象。

4.集合

Python也有实现可变且不可变的集合和多集合数据结构。

1).set集合

用来处理去掉重复元素非常有效,多个集合可以进行运算处理,比如取两个集合的交集,联合等等。

2).frozenset不可变集合

frozenset类实现的不可变set.frozenset对象是静态的,并且仅允许对其元素进行查询操作,而不能进行插入或删除操作。

3).多集

Python标准库中的collection里面的Counter类实现了一种多集或袋类型,这个类型允许集合中的元素出现多次,是不是很神奇,一起来看一下。

5.堆栈

栈是一个非常重要的数据结构,支持快速后进/先出(LIFO)语义插入和删除。与列表或数组不同,堆栈通常不允许随机访问它们包含的对象。插入和删除操作通常也称为pushpop,Python的栈使用起来要比C,C++简单很多。

2).双向队列

Python的deque对象以双向链接列表的形式实现,它的操作很像list 同时 ,相比于list实现的队列,deque实现拥有更低的时间和空间复杂度。list实现在出队(pop)和插入(insert)时的空间复杂度大约为O(n),deque在出队(pop)和入队(append)时的时间复杂度是O(1)。

双向队列其实有很多种妙用,尤其是在访问队列里面的头尾的数据效率非常高,而且还支持很多队列的黑科技,比如逆时针旋转。

3).并发里面的队列

当我们处理大量的数据请求的时候,比如我们需要爬大量的网站的网址,有的时候我们会将待处理的请求扔到队列queue里面,用多进程或者多线程进行并发处理。比如典型的生产者消费者的模式中就经常用到queue.

限于篇幅,还有一小部分的数据结构没有展开,基本上Python主要的数据结构都在上面了。

罗列的很多数据结构,老司机都没有怎么用到。其实好的程序员在做项目的时候都会考虑到数据结构,用那种数据结构更节省内存,更加提高效率。

这是一门硬功夫,需要不断的在实战项目中推敲思考,好了希望本篇总结对大家有帮助。

有热门推荐????1. 超全Python IDE武器库大总结,优缺点一目了然!
2. Python 30道高频面试题及详细解答
3. 精华技巧,学会这几招可以假装是Python高手
4. 哇!用Python读取CVS文件竟然有5招,据说90%的人只会2招菜鸟编程大本营,现已正式上线!接下来我们将会在该公众号上,为大家分享优质编程语言里趣味的干货,通俗易懂的实战案例,经验分享,让菜鸟也爱上编程。点这里,领取新手福利

太过瘾了,最全的Python数据结构总结,太干货了!相关推荐

  1. python画人民大会堂_太震撼了,我用python画出全北京的公交线路动图

    原标题:太震撼了,我用python画出全北京的公交线路动图 今天教大家用pyecharts制作北京市公交线路动态图,这应该是全网唯一一篇能正常运行的教程 一.获取百度秘钥 首先,本项目需要引用百度地图 ...

  2. 你见过的最全面的Python重点知识总结!

    这是一份来自于 SegmentFault 上的开发者 @二十一 总结的 Python 重点.由于总结了太多的东西,所以篇幅有点长,这也是作者"缝缝补补"总结了好久的东西,强烈建议收 ...

  3. html标签 补全方法 python,Python Beautiful Soup学习之HTML标签补全功能

    Beautiful Soup是一个非常流行的Python模块.该模块可以解析网页,并提供定位内容的便捷接口. 使用下面两个命令安装: pip install beautifulsoup4或者 sudo ...

  4. python数据结构之字符串详解

    目录 一.什么是字符串 二.字符串的特性 1.拼接 2.字符串的格式化输出 3.字符串索引 4.字符串分片 5.字符串的不可变性 三.字符串的好用函数 1.大小写切换 2.分割.组合和移除 ①spli ...

  5. Python数据结构14:递归的原理,递归实现数列求和、求阶乘、十进制转为任意进制

    1. 概念:什么是递归? 递归(Recursion)是一种解决问题的方法.尤其是复杂问题,有时用递归解决复杂问题可能会出奇的简单. 递归将一个比较复杂的问题分解成更小规模的问题,持续分解直到问题规模小 ...

  6. python写算法太慢_程序运行慢?你怕是写的假 Python

    Python程序运行太慢的一个可能的原因是没有尽可能的调用内置方法,下面通过5个例子来演示如何用内置方法提升Python程序的性能. 1. 数组求平方和 输入一个列表,要求计算出该列表中数字的的平方和 ...

  7. 【Python基础入门系列】第07天:Python 数据结构--序列

    python内置序列类型最常见的是列表,元组和字符串.(序列是python中最基础的数据结构,而数据结构是计算机存储,组织数据的方式.) 另外还提供了字典和集合的数据结构,但他们属于无顺序的数据集合体 ...

  8. python你TM太皮了——区区30行代码就能记录键盘的一举一动

    先看看效果 Like This↓ 一.公共WiFi 公用电脑什么的 在我们日常在线上工作.玩耍时,不论开电脑.登录淘宝.玩网游 统统都会用到键盘输入 在几乎所有网站,例如淘宝.百度.126邮箱等等 为 ...

  9. python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

    python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...

最新文章

  1. S.O.L.I.D.类设计原则
  2. HDU D Tree [点分治]
  3. 七年程序员生涯,我学到的重要六课
  4. as上的git到码云操作_如何使用git从码云克隆项目到本地?
  5. Python:int,float,str之间的转换
  6. vue(一)vue-cli安装
  7. jquery控制span的display属性为 none
  8. vue-router传递参数的两种方式
  9. 计算机硬盘容量单位有kbmb1,mb和kb换算(MB换算成GB)
  10. LeetCode 592
  11. PyTorch模型定义和训练技巧
  12. 修复 j-link the connected j-link is defective 警告
  13. selenium处理iframe标签
  14. Hbase集群搭建超详细教程
  15. DatePicker时间格式化年月日
  16. oracle vba 数组_vba 数据库目录
  17. web架构中的前置机
  18. redis的集成在springbooot版本之间差异(主要分为1.4版本之前后之后)
  19. 腾讯云网站备案授权码是什么及如何使用?
  20. 【论文】Oriented R-CNN for Object Detection

热门文章

  1. 网上开期货账号方便快捷
  2. mysql覆盖索引详解
  3. js全局变量-局部变量
  4. 14 Flask mega-tutorial 第14章 Ajax(百度翻译API):异步JavaScript和XML的缩写(Asynchronous Javascript And XML)
  5. 2022/4/4-web前锋笔记p49
  6. 读书有益——》【20190614,人间失格】
  7. 计算机协会申请流程,成立计算机协会的申请书
  8. Syncthing VS Resilio Sync VS Nextcloud 文件同步服务对比
  9. 神经网络模型的训练过程,人脸识别神经网络模型
  10. 无人车路径规划算法—(3)基于搜索的路径规划算法 (BFS/DFS/Dijkstra)