最新公告
  • 欢迎光临数据科学与编程,我们是数据学科学兴趣交流小组立即加入我们
  • 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.

    本站上原创文章未经作者许可,不得用于商业用途,仅做学习交流使用,本站免责声明。转载请注明出处,否则保留追究法律责任的权利。《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
    数据科学与编程 » Python数据结构总结

    发表评论

    • 52会员总数(位)
    • 310资源总数(个)
    • 30本周发布(个)
    • 1 今日发布(个)
    • 331稳定运行(天)

    提供最优质的博文资源集合

    立即阅览 了解详情