精华内容
下载资源
问答
  • Python数据结构

    千次阅读 2017-10-23 15:18:53
    Python数据结构  Python数据结构有列表、元组、字典、队列、栈、树等等。  Python中的数据结构有非常多的类型,其中,Python中系统自己定义好的,不需要我们自己去定义的数据结构叫做Python的内置数据...

    Python数据结构


      Python数据结构有列表、元组、字典、队列、栈、树等等。


      Python中的数据结构有非常多的类型,其中,Python中系统自己定义好的,不需要我们自己去定义的数据结构叫做Python的内置数据结构,比如列表、元组等,而有些数据组织方式,Python系统里面没有直接定义,需要我们自己去定义实现这些数据的组织方式,这些数据组织方式成为Python的扩展数据结构,比如栈、队列等。

    #Python的内置数据结构有元组、列表、字典等
    
    #现在有三个物品,分别是"apple","orange","pear",需要将这三个物品存储起来
    
    #存储方式一:这三个物品每个物品按顺序分别存储到一个柜子中,这些物品可以取出来
    ["apple","orange","pear"]
    
    #存储方式二:这三个物品每个物品按顺序分别存储到一个柜子中,这些物品不可以取出来,也不可以放新物品,不可挤一个柜子
    ("apple","orange","pear")
    
    #存储方式三:这三个物品不仅按顺序分别存储到一个柜子中,而且每个柜子还有名称
    {"sam":"apple","Jac":"orange","mating":"pear"}

    注意:字典中key是有序的。




      

    展开全文
  • Python数据结构与算法(10)---二进制数据结构Struct

    万次阅读 热门讨论 2021-04-19 12:20:29
    目录前言 前言 在C/C++语言中,struct被称为结构体。而在Python中,struct是一个专门的库,用于处理字节串与原生Python数据结构类型之间的转换。

    二进制数据结构Struct

    在C/C++语言中,struct被称为结构体。而在Python中,struct是一个专门的库,用于处理字节串与原生Python数据结构类型之间的转换。

    本篇,将详细介绍二进制数据结构struct的使用方式。

    函数与Struct类

    struct库包含了一组处理结构值得模块级函数,以及一个Struct类。格式指示符将由字符串格式转换为一种编译表示,这与处理正则表达式得方式类似。

    这个转换会耗费一些资源,所以创建一个Struct实例并再这个实例上调用方法时,只完成一次转换,往往会更高效。

    打包

    Struct支持使用格式指示符将数据打包为字符串,另外支持从字符串解包数据,格式指示符由表示数据类型的字符串和可选的数量及字节序指示符构成。

    下面,我们来打包一个元组,将其转换为16进制字节序列,示例如下:

    import struct
    import binascii
    
    values = (2, 'lyj'.encode('UTF-8'), 3.8)
    s = struct.Struct('I 3s f')
    packed_data = s.pack(*values)
    print("原值:", values)
    print("格式指示符:", s.format)
    print("大小:", s.size, 'bytes')
    print("打包值:", binascii.hexlify(packed_data))
    

    运行之后,效果如下:

    打包

    这里的格式指示符为“I 3s f”。前面介绍array数组时,我们已经列出过一个表格。其中I标识一个整型或长整型,3s表示3个字节字符串(lyj),f表示浮点数。

    解包

    struct库使用unpack()可以从打包的表示数据中抽取数据,这里直接复制上面的打包值,进行测试。示例如下:

    import struct
    import binascii
    
    packed_data = binascii.unhexlify(b'020000006c796a0033337340')
    s = struct.Struct('I 3s f')
    unpacked_data = s.unpack(packed_data)
    print("解包值:", unpacked_data)
    

    运行之后,效果如下:

    解包

    虽然使用unpack()解包基本会得到相同值,但浮点数的值有微小的差别。

    字节序指示符

    默认情况下,值会使用原生C库的字节序(endianness)来编码。Struct的字节序指示符如下表所示:

    代码 含义
    @ 原生顺序
    = 原生标准
    < 小端
    > 大端
    ! 网络顺序

    示例如下:

    import struct
    import binascii
    
    values = (2, 'lyj'.encode('UTF-8'), 3.8)
    endianness = [
        ('@', '原生顺序'),
        ('=', '原生标准'),
        ('<', '小端'),
        ('>', '大端'),
        ('!', '网络顺序'),
    ]
    for code, name in endianness:
        s = struct.Struct(code + ' I 3s f')
        packed_data = s.pack(*values)
        print("格式化字符串:", s.format, ' for ', name)
        print("大小:", s.size, 'bytes')
        print("打包:", binascii.hexlify(packed_data))
        print("解包:", s.unpack(packed_data))
    

    运行之后,效果如下:
    字节序

    如果想改变字节序来编码,如上面代码所示,只需要改变格式串中提供一个显式的字节序指令,就可以很容易地覆盖这个默认选择。

    缓冲区

    通常在强调性能的情况下或者向扩展模块传入或传出数据时才会处理二进制打包数据。

    为了避免为每个打包结构分配一个新缓冲区所带来的开销,通常情况下,我们使用pack_into()和unpack_from()方法支持直接写入预分配的缓冲区。

    示例如下:

    import struct
    import binascii
    import ctypes
    import array
    
    values = (2, 'lyj'.encode('UTF-8'), 3.8)
    s = struct.Struct('I 3s f')
    print("原始值:", values)
    b = ctypes.create_string_buffer(s.size)
    print("打包之前(缓冲区的值):", binascii.hexlify(b.raw))
    s.pack_into(b, 0, *values)
    print("打包之后(缓冲区的值):", binascii.hexlify(b.raw))
    print("解包:", s.unpack_from(b, 0))
    
    a = array.array('b', b'\0' * s.size)
    print("打包之前(缓冲区的值):", binascii.hexlify(a))
    s.pack_into(a, 0, *values)
    print('打包之后(缓冲区的值):', binascii.hexlify(a))
    print("解包:", s.unpack_from(a, 0))
    

    运行之后,效果如下:

    缓冲区

    这里通过两种方式,创建缓冲区。其中size属性用于指出缓冲区需要的大小。

    展开全文
  • Python数据结构与算法视频教程

    千人学习 2018-06-02 10:27:16
    Python数据结构与算法视频培训教程:本课程内容包含了程序员常用的数据结构知识,涉及快速排序、树与二叉树、堆、堆排序、图的概念与遍历、Python常用的内置算法与数据结构等开发知识。数据结构和算法是每个程序员...
  • 3种Python数据结构,11种创建方法,这个总结,超赞!

    Python常用的数据结构,有如下几种。但是我们用的最多的,还是字符串、列表、字典这3种。
    在这里插入图片描述
    其实学习任何一门编程语言,最基础的就是学习它的数据结构。

    拿Python来说,数据结构的概念也是超级重要,不同的数据结构,有着不同的函数,供我们调用。

    接下来,我们分别来介绍字符串、列表、字典的创建方法。

    字符串的3种创建方式

    ① 单引号(‘ ’),创建字符串

    a = 'I am a student'
    print(a)
    

    结果如下:
    在这里插入图片描述

    ② 双引号(“ ”),创建字符串

    b = "I am a teacher"
    print(b)
    

    结果如下:
    在这里插入图片描述

    ③ 续3个单引号或者3个单引号,创建多行字符串

    c = '''
    I am a student
    My name is黄伟
    I am a teacher
    My name is陈丽
    '''
    print(c)
    

    结果如下:
    在这里插入图片描述

    列表的5种创建方式

    ① 用[]创建列表

    a = [1,2,3]
    print(a)
    

    结果如下:
    在这里插入图片描述

    ② 用list创建列表

    b = list('abc')
    print(b)
    
    c = list((1,2,3))
    print(c)
    
    d = list({"aa":1,"bb":3}) #对于字典,生成的是key列表。
    print(d)
    

    结果如下:
    在这里插入图片描述

    ③ 用range创建整数列表

    e = list(range(10))
    print(e)
    

    结果如下:
    在这里插入图片描述

    ④ 用列表推导式创建列表

    f = [i for i in range(5)]
    print(f)
    

    结果如下:
    在这里插入图片描述

    ⑤ 用list和[]创建空列表

    g = list()
    print(g)
    
    h = []
    print(h)
    

    结果如下:
    在这里插入图片描述

    字典的5种创建方式

    ① 用{}创建字典

    a = {'name':'陈丽','age':18,'job':'teacher'}
    print(a)
    
    b = {'name':'陈丽','age':18,'job':['teacher','wife']}
    print(b)
    

    结果如下:
    在这里插入图片描述

    ② 用dict创建字典

    c = dict(name='张伟',age=19)
    print(c)
    
    d = dict([('name','李丽'),('age',18)])
    print(d)
    

    结果如下:
    在这里插入图片描述

    ③ 用zip函数创建字典

    x = ['name','age','job']
    y = ['陈丽','18','teacher']
    e = dict(zip(x,y))
    print(e)
    

    结果如下:
    在这里插入图片描述

    ④ 用{},dict创建空字典

    f = {}
    print(f)
    
    g = dict()
    print(g)
    

    结果如下:
    在这里插入图片描述

    ⑤ 用fromkeys创建’值为空’的字典

    h =dict.fromkeys(['name','age','job'])
    print(h)
    

    结果如下:
    在这里插入图片描述

    展开全文
  • python数据结构之树形结构

    千次阅读 2019-04-09 17:19:01
    python数据结构 二叉树 树的查询,遍历,存储

    树的定义:

    一个或多个节点组成的,除树根外,其余节点可分为n>=0个互斥的集合。其中每个子集合也是一种树形结构。节点可互联但不能构成无出口的回路。不能是空集合
    

    森林:

    n个互斥树组成森林
    

    度数:

    每个节点的所有子树的个数
    

    层数:

    以根节点为第一层向下,节点所在层数
    

    高度:

    树的最大层数
    

    树叶或终端节点:

    度数为零的节点
    

    祖先和子孙节点

    祖先节点是该节点向上的任意节点,子孙节点是向下的所有节点
    

    非终端节点

    树叶节点以外的节点
    

    同代:

    树中层数相同的节点
    

    二叉树概念:

    二叉树可以是空集合,节点的度数必须0<=d<=2
    二叉树的子树之间是有次序关系的
    组成结构(字段):右指针  数据  左指针
    

    使用二叉树的原因

    电脑中树一般以链表形式存储,对于n叉树(n-way树),必须为每个节点预留n个链接字段的存储空间:数据  指针 指针 指针 空 空 ... 指针n
    设:n叉树有m个节点,树共有m*n个字段,另外除树根外每个非空链接都会指向一个节点所以空连接字段个数为m*n-(m-1)=m*(n-1)+1#m-1个非空节点#那么n叉树的浪费率为:(m*(n-1)+1)/(m*n)。2叉树是1/2,3叉树是2/3。这个值会越来愈大,所以说n叉树的浪费会愈来愈大
    

    任意二叉树下:

    终端节点数为n0,度数为2的节点数为n2,有:n0=n2+1
    解:设总结点数为n,度数为1的节点数为n1有:n=n0+n1+n2
       设分支总数为B,则n=B+1,分支B为分支为1的节点数和分支为2的节点数的和,有:B=n1+2n2,
       综上有:n=n1+2n2+1,那么n1+2n2+1=n0+n1+n2,最后有n0=n2+1
    

    树的最大节点数:

    高度为k的二叉树总结点数最大为2的k次方减一###满二叉树的情况下数组求和
    
    层数为i的节点数最多为2的(i-1)次方
    

    满二叉树

    二叉树高度为h,树的节点为2的h次方减1
    有:每一层都有2的i次方减1个节点
    

    在这里插入图片描述
    完全二叉树:

    节点数小于2的i次方减1,节点排列和满二叉树一样从左到右从上到下
    特点:设n个节点的完全二叉树层数为log2的(n+1)次方取最大整数
    
    

    在这里插入图片描述
    斜二叉树:

    二叉树完全没有左节点或是右节点
    

    严格二叉树

    每一个非终端节点均有非空的左右子树
    

    在这里插入图片描述
    二叉树的存储方式
    一维数组的方式#二叉查找树:实际上是把二叉树填满空间为完全二叉树来存储

    左子树的索引值是父节点索引值*2
    右子树的索引值是父节点索引值*2+1
    

    在这里插入图片描述
    建立二叉查找树:

    btree=[0]*16
    data=[]
    length=9
    def btree_creat(btree,data,length)
        for i in range(1,length):
            level=1
            while btree[level] !=0:#存放数据数组当前有值的节点下存放也就是该节点是父节点存的是子节点
                if data[i]>btree[level]:#数组内的值大于树根往右子树比较
                    level=level*2+1
                else:                   #数组内的值小于或等于树根往左子树比较
                    level=level*2
             btree[level]=data[i]#直到第一个 btree[level]为零赋值,level是已经发生变化的
    

    在这里插入图片描述
    链表表示法:#增加和删除比较容易,相应的位置改变指针指向就好了。数组了则需要大量修改索引,会增加遍历次数。

    class tree:#建立节点模型
        def __init__(self):
            self.data=0
            self.right=None
            self.left=None
    def create_tree(root,val):
        newnode=tree()#建立新节点指针指向None
        newnode.data=val
        newnode.right=None
        newnode.left= None
        if root==None:#确认根节点
            root=newnode
            return root
        else:
            current=root#父节点
            while current !=None:
                backup=current#尾节点
                if current.data>val:#父节点的值大于当前节点值,则当前节点是父节点的左节点
                    current=current.left
                else:
                    current=current.right#否则就是右节点
            #把尾节点和当前节点值比较,更换尾节点
            if backup.data>val:
                backup.left=newnode
            else:
                backup.right=newnode
    
        return root
    data=[5,6,24,8,12,3,17,1,9]
    #遍历左右分支
    # 1,3,5,6,8,9,12,17,24
    ptr=None
    root=None
    for i in range(9):
        ptr=create_tree(ptr,data[i])
    print("!!!!!!!")
    
    root=ptr.left
    while root !=None:
        print('%d'%root.data)
        root=root.left
    print("###########")
    root=ptr.right
    while root !=None:
        print('%d'%root.data)
        root=root.right
    

    二叉树的遍历:

    中序遍历:左子树  树根  右子树
    前序遍历:树根   左子树  右子树
    后序遍历:左子树  右子树 树根
    
    展开全文
  • Python数据结构与算法面试(上)

    千人学习 2019-09-18 11:49:44
    Python数据结构与算法面试》系列课程不仅详细讲解了数据结构的核心知识点,也同样可以用于相关领域的面试准备,因为本系列课程中包含了大量各大厂的面试原题,以及经过改进的题目。 这一系列课程主要包括如下内容...
  • Python数据结构底层实现浅析——list和tuple Python数据结构底层实现浅析——list和tuple 提到python中list和tuple的底层实现,就要回到最基本的数据结构——线性表。 把一组数据元素,通常它们还是同一类型,...
  • python数据结构与算法总结

    万次阅读 多人点赞 2019-04-24 09:48:14
    python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章: 《数据结构和算法对python意味着什么?》 《顺序表数据结构python中的应用》 《python实现单向链表数据结构及其基本方法》...
  • 图解Python数据结构与算法-实战篇

    千人学习 2020-06-03 21:33:00
    数据结构与算法一直是编程的核心,本课程将结合面试常考 leetcode 网站真题作为讲解, 带领Python新手将所学到的数据结构和算法知识应用到实战当中。
  • Python 数据结构 tree 树

    万次阅读 2018-04-19 03:37:09
    树结构 tree 为常用的数据结构,本文是用python实现的树结构的基本节点类TreeNode,并实现相关字节点的增,删,查找等操作。
  • Python数据结构与算法视频培训教程:本课程内容包含了程序员常用的数据结构知识,涉及快速排序、树与二叉树、堆、堆排序、图的概念与遍历、Python常用的内置算法与数据结构等开发知识。数据结构和算法是每个程序员...
  • Python 数据结构_堆栈

    千次阅读 2016-08-30 16:41:02
    堆栈堆栈堆栈是一个后进先出(LIFO)的数据结构. 堆栈这个数据结构可以用于处理大部分具有后进先出的特性的程序流 . 在堆栈中, push 和 pop 是常用术语: push: 意思是把一个对象入栈. pop: 意思是把一个对象出栈. ...
  • def is_connected(self, i, j): return self.get_root(i) == self.get_root(j)
  • 1.1 python数据结构之链表——功能实现

    千次阅读 多人点赞 2018-03-19 23:50:34
    这是python实现数据结构的第一篇,不是讲python內建的元组、字典那些数据结构,而是基于python的链表、队列、栈、二叉树等数据结构的实现。 基于C++和JAVA的数据结构实现俯拾皆是,然而python的实现还鲜见于博客。...
  • Basic Data Structures第1章 基本数据结构 Objectives 学习目标 To understand the abstract data types stack, queue, deque, andlist.To be able to implement the ADTs stack, queue, and deque ...
  • d.append('x') d.append('y') d

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 542,055
精华内容 216,822
关键字:

python数据结构

python 订阅
数据结构 订阅