Python的常用数据结构学习目的本题,尽量用最简洁的文字,用典型的案例来盘点Python的常用数据结构。如果你还处于Python入门阶段,通常只需要掌握list、tuple、set、dict等数据结构,并灵活运用即可。但是随着学习的深入,需要了解Python内置的更强大的数据结构deque、heapq、Counter、OrderedDict、defaultDict、ChainMap。掌握它们往往可以让你少写一些代码,并能更高效地实现功能。我的构建之路学习目标第一阶段学习数据结构:掌握它们的基本用法,用它们解决一些基本问题;第二阶段学习:知道在哪个场景选择最合适的数据结构来解决问题;第三阶段学习:了解内置数据结构背后的源码实现,连接《算法和数据结构》知识中的知识,打通任督二脉。根据这三个阶段的定义,总结出以下10种最常用的数据结构:1.list的基本用法废话不多说,前面有单独的专题详细介绍list的使用。,修改场景,在需要频繁插入和删除元素的场景中非常糟糕。实现原理列表对应数据结构的线性表。列表的长度不需要在初始状态中指定。当插入的元素超过初始长度时,开始动态扩容。删除的时候,尤其是链表开头的元素,时间复杂度是O(n)2。元组是一种特殊的列表,不允许添加或删除元素,即一旦创建,就永远不允许添加、删除或修改。基本用法元组广泛用于打包和拆包。例如,当一个函数有多个返回值时,它被打包成一个元组,当它赋值给等号左边的变量时,它被解包。In[22]:t=1,2,3In[23]:type(t)Out[23]:tuple实际上创建了一个元组实例使用场景如果你非常确定你的对象以后不会被修改,你可以使用它大胆地元组。为什么?这一点尤其重要,因为与列表相比,元组实例的内存效率更高。In[24]:fromsysimportgetsizeofIn[25]:getsizeof(list())Out[25]:72#一个list实例占用72字节In[26]:getsizeof(tuple())Out[26]:56#one元组instance占用56字节,所以创建100个instance,tuple可以节省1K多字节。3、集合的基本用法集合是一种不能包含重复元素的数据结构。这个特性自然用于列表的去重。In[27]:a=[3,2,5,2,5,3]In[28]:set(a)Out[28]:{2,3,5}另外还有set结构可以用于两个集合实例的交集、并集、差集等操作。In[29]:a={2,3,5}In[30]:b={3,4,6,2}In[31]:a.intersection(b)#IntersectionOut[31]:{2,3}如果只是想缓存某些元素值,并且要求元素值不能重复,适合使用这种结构。并且集合中允许增删元素,效率非常高。实现原理Set内部对值进行哈希处理作为索引,然后根据索引获取数据,所以删除、添加、查询元素都非常有效。4、dict的基本用法dict是Python中最常用的数据结构之一。通过dict函数,{}写法,字典生成公式等创建字典,增删改查元素效率很高。d={'a':1,'b':2}#{}创建字典#生成列表In[38]:d={a:bfora,binzip(['a','b'],[1,2])}In[39]:dOut[39]:{'a':1,'b':2}使用场景字典特别适合查询次数多的场景,时间复杂度为O(1)。比如leetcode第一题求解两个数之和的时候,就会用到dict的O(1)查询时间复杂度。同时,Python类中的属性值等信息也缓存在__dict__这个字典类型的数据结构中。但值得注意的是,dict占用的字节数是list和tuple的3、4倍,所以对内存要求严格的场景要慎重考虑。In[40]:getsizeof(dict())Out[40]:248实现原理字典是一个哈希表,也存储键值对。以上四种数据结构相信大家都不陌生,下面简单介绍一下。接下来,我们将详细介绍以下6种数据结构及其各自的使用场景,并会列举更多的例子。5.双端队列6.计数器7.OrderedDict8.heapq9.defaultdict10.ChainMap
