iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python学习日志之Python数据结
  • 649
分享到

Python学习日志之Python数据结

数据日志Python 2023-01-31 03:01:56 649人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

python数据结构初识:一、Python数据结构概述1.何为数据结构   在程序中,同样的一个或几个数据组织起来,可以有不同的组织方式,也就是不同的存储方式,不同的组织方式就是不同的结构,我们把这些数据组织在一起的结构就叫做数据结构例如:

python数据结构初识:

一、Python数据结构概述

1.何为数据结构

   在程序中,同样的一个或几个数据组织起来,可以有不同的组织方式,也就是不同的存储方式,不同的组织方式就是不同的结构,我们把这些数据组织在一起的结构就叫做数据结构

例如:

   有一串字符串:"abc",我们将它重新组织一下,比如通过list()函数将"abc"变成["a","b","c"],那么这个时候数据发生了重组,重组之后的结构就发生了变化,我们把["a","b","c"]这种结构叫做列表,也就是说列表是数据结构的一种类型之一。数据结构除了列表之外还有元组(),字典{"":"",}、队列、栈、树等。


2.数据结构实例

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


#实例:

#Python内置的数据结构有元组、列表、字典等。

#现在有三个物品,分别是"apple","orange","pear",需要把这三个物品存储起来

#存储方式1:这三个物品每个物品按顺序分别存储到一个柜子里,这些物品可以取出来,如下:可以修改

["apple","orange","pear"]


#存储方式2:这三个物品每个物品按顺序分别存储到一个柜子里,但是物品不可以取出来,也不可以放到其他柜子,如下,其实就是不可修改

("apple","orange","pear")


#存储方式3:这三个物品不仅按顺序存储到一个柜子里,而且每个柜子还有一个名词

{"sam":"apple","jac":"orange","mating":"pear"}


3.数据结构和算法的关系

    在程序设计中,我们会发现数据结构经常和算法合在一起,这是为什么呢?其实,数据结构是数据的组织方式,就是存储方式,也就是说,数据结构是静态的。算法是指运算方法,通俗的说,就是运算思维,程序是动态的,需要将数据进行计算,运算方法有很多,不同的运算方法叫做不同的算法,所以我们可以这样理解:数据结构是算法的基础,但相同的数据结构运用不同的算法拥有不同的效率


二、Python常见数据结构-栈

1.何为栈

    栈是一种数据结构,这种数据结构不同于系统自带的内置数据结构,属于扩展数据结构,需要自己定义

特点:栈相当于一端开口一端封闭的容器,数据A可以存储在栈里面,把数据A移动到里面这个过程叫做进栈,也叫压栈、入栈

    如果数据A到达栈顶后,同是占了栈的一个位置,当再进入一个数据B的时候,也将到达栈顶,然后使A到栈顶的下一个位置,栈只能对栈顶的数据进行操作,此时就不能对A进行操作,可以将B出栈或删除,等B出栈后,A变成栈顶的时候就可以对A进行操作


2.栈的图示

   只能从开口进开口出,栈顶指向新数据的位置,栈底不变,用过栈顶指针的移动进行数据的进栈出栈。


3.Python中栈的实现

   栈是列表的扩展,只是栈只能从栈顶进行修改,不像列表可以从任意地方

#实例:

#栈的实现:

#栈是列表的扩展,只是栈只能从栈顶进行修改,不像列表可以从任意地方


 

class Stack():             #定义栈的类
     def __init__(st,size): #初始化函数,两个形参,一个代表主体,一个代表容
量
         st.stack=[];       #声明了栈
         st.size=size;      #声明栈的容量
         st.top=-1;         #初始与栈底重合的栈顶
     def push(st,content):  #入栈定义
         if st.Full():
             print"Stack is Full"
         else:
            st.stack.append(content)  #入栈,数据进入,append增加内容,调用
append方法
            st.top=st.top+1           #栈顶指针加1
     def out(st):
         if st.Empty():
             print"Stack is Empty!"
         else:
             st.top=st.top-1
            
     def Full(st):          #判断栈是否Full
         if st.top==st.size:
             return True    #栈满
         else:
             return False
     def Empty(st):
         if st.top==-1:
             print"Stack is Empty!"


三、Python常见数据结构-队列

1.何为队列

    队列也是一种扩展的数据结构

特点:两端开的开口容器,但是只能在一端进行删除操作,不能进行插入操作,而另一端只能进行插入操作而不能进行删除操作,进行插入的这端叫做队尾,进行删除操作的这端叫做队首

    数据是队尾进队首出,类似于排队

    队首队尾不是根据位置来区别的,是根据功能来区分的


2.队列的图示

    队尾进队首出

    进队:qu.tail=qu.tail+1

    出队:qu.head=qu.head+1


3.Python中队列的实现

#队列的实现
class Queue():                  #队列类
    def __init__(qu,size):      #初始化信息,队列主体qu,队列容量size
        qu.queue=[];            #用列表声明
        qu.size=size;           #传递进来的参数信息
        qu.head=-1;             #刚开始的队首队尾都在输出方
        qu.tail=-1;
    def Empty(qu):              #先判断是否为空
        if qu.head==qu.tail:    #空的时候队首队尾指针参数
            return True
        else:
            return False
    def Full(qu):               #判断队列是否已满
        if qu.tail-qu.head+1==qu.size:
            return True
        else:
            return False
    def enQueue(qu,content):    #进队
        if qu.Full():
            print "Queue is Full!"
        else:
            qu.queue.append(content)
            qu.tail=qu.tail+1   #进队只和队尾相关,队尾指针加1
    def outQueue(qu):           #出队
        if qu.Empty():
            print "Queue is Empty!"
        else:
            qu.head=qu.head+1   #出队指针只和队首相关,队首加1

            

四、Python常见数据结构-树

1.何为树:

    树是一种非线性的数据结构,树具有非常高的层次性。利用树来存储数据,能够是用公有元素进行存储,能够很大程度上节约空间。

定义:有且只有一个根节点,其次有N个不相交的子集,每个子集为一颗子树


2.树的图示:


3.什么是二叉树

    二叉树市一中特殊的树,二叉树要么是空树,要么是左、右两个不相交的子树组成,二叉树是有序树,即使只有一个子树,也需要区分该子树是左子树还是右子树。二叉树每个节点的度不可能大于2,可以取0,1,2。二叉树的存储方式有两种,一种是顺序方式,一种是链式存储。

顺序存储采用一维数组的存储方式

链式存储中,采用表的存储方式,通常分为三部分:数据域,左孩子链域和右孩子链域


4.二叉树的图示:

有5种情况,加上空树


5.Python中树以及二叉树的实现:通过列表表示

#1.树的基本构造

#树通过逗号,隔开

#树是由列表构成的,实际上Tree2=[58,6,[5]],Tree3=[5]
Tree=[2,3,[58,6,[5]]]
print Tree[0]
print Tree[1]
print Tree[2]
Tree2=Tree[2]
print Tree2[0]
>>> 
2
3
[58, 6, [5]]
58#实现了树的嵌套,子树
>>>


#2.二叉树的构造

'''

比如要构造一个二叉树:

      7

  8       9

   23       36

57   58

可以这样分析:

节点(左节点,右节点,当前节点数据)

根节点base=(-->8也就是jd2,-->9也就是jd3,base)

jd2=(no,-->23也就是jd4,8)

jd3=(no,-->36也就是jd5,9)

jd4=(-->57也就是jd6,-->58也就是jd7,23)

jd5=(no,no,36)

jd6=(no,no,57)

jd7=(no,no,58)

但是要注意,写的时候倒过来写,就是从右叶子开始写,直到根节点

jd7=(no,no,58)

jd6=(no,no,57)

'''

class TRee():    #树的初始化
    def __init__(self,leftjd=0,rightjd=0,data=0):
        self.leftjd=leftjd;
        self.rightjd=rightjd;
        self.data=data;
class Btree():  #二叉树的初始化
    def __init__(self,base=0):
        self.base=base
    def empty(self):
        if self.base is 0:
            return True
        else:
            return False
    def qout(self,jd):
        """前序遍历,NLR,根左右"""
        if jd==0:
            return   #没有节点的话,原样返回
        print jd.data  #先返回根节点的值
        self.qout(jd.leftjd)  #访问左节点
        self.qout(jd.rightjd) #访问右节点
    def mout(self,jd):
        """中序遍历,LNR,左根右"""
        if jd==0:
            return
        self.mout(jd.leftjd)
        print jd.data
        self.mout(jd.rightjd)
    def hout(self,jd):
        """后序遍历,LRN,左右根"""
        if jd==0:
            return
        self.hout(jd.leftjd)
        self.hout(jd.rightjd)
        print jd.data
>>> jd1=TRee(data=8)
>>> jd2=TRee(data=9)
>>> base=TRee(jd1,jd2,7)
>>> x=Btree(base)  #调用Btree
>>> x.qout (x.base) #前序遍历NLR根左右
7
8
9
>>> x.mout (x.base) #中序遍历LNR左根右
8
7
9
>>> x.hout (x.base) #后序遍历LRN左右根
8
9
7
>>>


五、Python常见数据结构-链表

1.何为链表

    链表也是一种数据结构,链表是一种非连续,非顺序的存储方式,链表由一系列节点组成,每个节点包括两个部分,一部分是数据域,另一个部分是指向下一节点的指针域,链表可以分为单向链表,单向循环链表,双向链表,双向循环链表。


单向链表:a可以指向b,但是b不能指向a

单向循环链表:表头和表尾首尾相连,仍是单项

双向链表:a可以指向b,b也可以指向a

双向循环链表:首尾相连,可以顺时针,也可以逆时针


2.链表的图示

指针域:指向下一个节点的位置

节点之间是不相连的


3.Python中链表的实现

#链表的实现(单向链表)
class jd():   #节点类,存储数据
    def __init__(self,data):  #初始化
        self.data=data
        self.next=None  #最初的时候不指向
    
class Linklist():  #链表类,实现链表作用
    def __init__(self,jd2):  #初始化
        self.head=jd2        #把jd2传到表头
        self.head.next=None  #下一个位置
        self.tail=self.head  #初始化表头表尾重合
    def add(self,jd2):       #增加链表节点
        self.tail.next=jd2   #将节点2赋值到链表尾
        self.tail=self.tail.next
    def view(self):          #查看链表的所有情况
        jd2=self.head        #表头
        linkstr=""           #节点的数据,转化成字符串,然后不断累加
        while jd2 is not None:  #节点2不为空,开始
            if jd2.next is not None: #节点2下一个节点不为空,开始遍历
                linkstr=linkstr+str(jd2.data)+"-->"  #开始遍历节点
            else:
                linkstr+=str(jd2.data)
            jd2=jd2.next
        print linkstr    #打印出链表linkstr
>>> jd1=jd(7)
>>> jd2=jd("hello")
>>> jd3=jd(8)
>>> x=Linklist(jd1)
>>> x.add (jd3)
>>> x.add (jd2)
>>> x.view ()
7-->8-->hello
>>>


六、Python常见数据结构-bitmap:通过数组表示

1.何为bitmap

    同样,bitmap也是一种数据结构。bit指的是位,map指的是图,bitmap也叫是位图。这种数据结构的存储简单来说就是把原来的数转化成二进制来存储,每个位占一个存储单元。我们对bitmap进行数据操作时,也就相当于操作一个位。bitmap的数据结构的优点是可以实现很好的排序


2.bitmap的图示

最高位为符号位,Python中一个数是32位,最右边为最低位,位图上存在数就变成1,不存在就是0

00000000 00000000 00000000 00000101

2^2+2^0=5,上面是数字5的二进制形式,实际上bitmap和二进制数值是有差异的

def bitIndex(self, num): #位索引,算出数值所在单元

        return num % 31   

   

3.Python中bitmap的实现

(1).bitmap排序原理:

例如:请比较1,2,34的大小(出去符号位最高位在左边)

数组1:可以存储31个数,除去符号位,范围1-31

数组2:可以存储31个数,除去符号位,范围32-62

1:存储到数组1,2^0

2:存储到数组1,2^1

34:存储到数组2,34-32=2,再加1,就是数组2第三位

首先:数组2的大于数组1,从右往左依次增大

开始时bitmap为0,当所对应的位置存在数据时,就开始映射到bitmap对应位置,位置


上的0变成1

#(2).bitmap的实现 
class Bitmap():
    def __init__(self, max): #最大的数
        self.size  = int((max+31 - 1) / 31) #计算所需要的数组个数
        self.array = [0 for i in range(self.size)]  #从数组中开始生成单元,
每个单元存储的值都是0
        
    def bitIndex(self, num): #位索引,算出数值所在单元
        return num % 31      
 
    def set(self, num):      #置1
        elemIndex =num / 31  #判断所在数组
        byteIndex = self.bitIndex(num)   #计算位索引
        elem= self.array[elemIndex]      #对应选择的数组
        self.array[elemIndex] = elem |(1 << byteIndex)  #置1,向左移动的次数
    def test(self, i):
        elemIndex = i / 31   #判断在第几个数组
        byteIndex = self.bitIndex(i)
        if self.array[elemIndex] & (1 << byteIndex): #判断是否在bitmap,不应
该超出范围
            return True
        return False
 
if __name__ == '__main__':
    MAX = ord('z')  #设置最大数为‘z’使用ord转化成ansll
    suffle_array = [x for x in 'coledraw'] #将单词拆分
    result       = []
    bitmap = Bitmap(MAX) #将MAX传递到Bitmap
    for c in suffle_array:  #从c开始调用到set
        bitmap.set(ord(c))
    for i in range(MAX + 1):  
        if bitmap.test(i):    #如果存在i中存在数值,进行依次调用到test
            result.append(chr(i))
 
    print '原始数组为:    %s' % suffle_array #拆分后的数组
    print '排序后的数组为: %s' % result
>>> =============================== RESTART ===============================
>>> 
>>> 
原始数组为:    ['c', 'o', 'l', 'e', 'd', 'r', 'a', 'w']
排序后的数组为: ['a', 'c', 'd', 'e', 'l', 'o', 'r', 'w']
>>>


七、Python常见数据结构-图

1.何为图

    图仍是一种数据结构,我们可以简单的理解成一个关系网络,该网络中有N多结点,每个结点都存储着一个数据,数据之间的关联我们可以用线把关联的结点连起来的方式进行表示。

    其中,有的数据关系是有方向的,比如数据A-->数据B,其关系只能从A到B,而不能从B到A,如果数据之间的关系是有方向,我们在图里面用带箭头弧线表示。有的数据关系是没有方向的,A--B表示既可以从A关联到B,也可以B关联A,这种没有方向的关系用线段表示。


2.图的图示

    不同的结点之间有的有直接联系,有的通过中间结点有间接联系  


3.Python中图的实现

#图的实现
chart={"A":["B","D"],"C":["E"],"D":["C","E"]}#图通过字典表示
#"A":["B","D"]:A-->B,A-->D
#"C":["E"]:C-->E
#"D":["C","E"]:D-->C,D-->E
def path(chart,x,y,pathd=[]):
#chart:图
#x:起始结点
#y:指向结点
#pathd=[]:走过的路径
    pathd=pathd+[x]  #初始结点
    if x==y:
        return pathd  #返回pathd
    if not chart.has_key(x):  #判断是否存在结点
        return None
    
    for jd in chart[x]:   #结点在chart所直接对应的结点
        if jd not in pathd:
            newjd=path(chart,jd,y,pathd) #初始结点变成jd,寻找路径
            if newjd:
                return newjd  #找到新结点的时候返回值
>>> =============================== RESTART ===============================
>>> 
>>> path(chart,"A","E")
['A', 'D', 'C', 'E']
>>>

与之共勉,入门学习,需要持之以恒。





--结束END--

本文标题: Python学习日志之Python数据结

本文链接: https://www.lsjlt.com/news/187725.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python学习日志之Python数据结
    Python数据结构初识:一、Python数据结构概述1.何为数据结构   在程序中,同样的一个或几个数据组织起来,可以有不同的组织方式,也就是不同的存储方式,不同的组织方式就是不同的结构,我们把这些数据组织在一起的结构就叫做数据结构例如:...
    99+
    2023-01-31
    数据 日志 Python
  • Python学习之日志模块详解
    目录日志的作用日志的等级logging 模块的使用logging 模块演示小案例OK,今天我们来学习一下 python 中的日志模块,日志模块也是我们日后的开发工作中使用率很高的模块...
    99+
    2022-11-13
  • python 学习日志(1)
    信号槽,这与qt的机制一样,但是整个运行的过程少有差异,在多次实验以后总结如下:在设计好窗体后,要生成窗体代码和Ui代码,这两者是分开的,一般自动生成的Ui不用动它,而是再Generating Dialog Code在这里面修改对信号槽的处...
    99+
    2023-01-31
    日志 python
  • Python学习之day3数据结构之列表
                                                          数据结构之列表一、列表定义      列表是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目。列表中的项目应包括在...
    99+
    2023-01-31
    数据结构 列表 Python
  • python 日志模块logging学习
           在日常项目中,总是需要记录下一些细小信息或者错误码、错误信息的,这个时候就需要进行日志的操作。 python中用于日志创建、设置和记录等功能的模块,就是logging了,下面是对其基本使用方法的介绍: 一、最最...
    99+
    2023-01-31
    模块 日志 python
  • 数据库学习之十:mysql日志管理
    十、mysql日志管理 课程大纲 1、MySQL日志类型简介 2、MySQL错误日志配置及查看 3、MySQL binlog介绍及管理实战 4、MySQL 慢查询日志设置及管理实战 1、日志的类型简介 mysql> sho...
    99+
    2014-12-31
    数据库学习之十:mysql日志管理
  • Python学习之内置函数总结
    目录常用函数abs 函数 演示all 函数 演示enumerate 函数 演示input 函数 演示isinstance 函数 演示vars 函数 演示hasattr 函数 演示se...
    99+
    2022-11-13
  • 学习Python日志存储:如何应对海量数据?
    在现代计算机应用中,日志记录是必不可少的。日志文件记录了各种系统活动,包括错误、警告、用户操作等等。对于开发人员和管理员来说,日志文件是诊断和调试问题的关键工具。然而,随着应用程序规模的不断扩大和系统日志量的增加,处理海量日志数据成为了一...
    99+
    2023-06-19
    日志 存储 大数据
  • python学习之数据库操作
    一、数据库基本操作 数据库操作: 查看存储引擎: show engines; 查看数据库: show databases; 或者show crea...
    99+
    2022-10-18
  • 学习日志-python基础01,浅谈p
    ==比较操作符:用来比较两个对象是否相等,value做为判断因素is同一性运算符:比较判断两个对象是否相同,id做为判断因素 >>> [] is [] False >>> [] == [] Tru...
    99+
    2023-01-31
    浅谈 基础 日志
  • python学习之数字
    目录 python学习之数字 1.python数值类型 2. 数字类型转换 3. 常用函数 3.1 数学函数 ...
    99+
    2023-01-30
    数字 python
  • python学习总结四(python数字
      一简介 数字 提供了标量贮存和直接访问。他是不可改类型。也就是数字的值变化时是生成了 新的对象。 1 如何创建数字和赋值。(数字对象) a = 1 就这么简单。 2 如何更新数字 因为单独数字不能做为变量,改变他的值。“3+5” 实际上...
    99+
    2023-01-31
    数字 python
  • python 进阶学习之python装饰器小结
    装饰器总结 什么是装饰器?处理函数的函数,加一个功能,但是不影响原来函数的内部结构生活中的例子:给手机加一个外壳,外壳保护了手机 装饰器有什么用?增强函数的功能 装饰器使用场景增加被...
    99+
    2022-11-12
  • Python学习手册之数据类型
     在上一篇文章中,我们介绍了 Python 的异常和文件,现在我们介绍 Python 中的数据类型。 查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/9979931.html 数据类型None 类...
    99+
    2023-01-30
    数据类型 手册 Python
  • 【python学习】日志文件里IP访问最
    日志文件例子:#111.172.249.84 - - [12/Dec/2011:05:33:36 +0800] "GET /p_w_picpaths/i/goTop.png HTTP/1.0" 200 486 "http://wh.xxxx...
    99+
    2023-01-31
    文件 日志 python
  • Python学习之不同数据类型间的转换总结
    目录字符串与数字类型的转换字符串与数字之间转换的要求字符串与数字之间的转换函数字符串与列表之间的转换split()函数-字符串转列表join()函数-列表转字符串数据类型转换-小练习...
    99+
    2022-11-13
  • Python学习之函数 def
    目录一、函数概述二、函数的调用三、函数参数的使用规则1、位置参数2、关键字参数赋值3、位置参数和关键字参数混合使用4、参数组 **字典  *列表5、*列表6、**字典总结一...
    99+
    2022-11-12
  • python学习之数组二
    作用于数组的函数: 通用函数:函数基于元素的,以单元方式作用于数组的,返回的是与原数组具有相同形状的数组。 不通用函数(数组函数):函数能以行或者列的方式作用于整个矩阵;如果没有提供任何参数时,它们将作用于整个矩阵。例如:max、sum和...
    99+
    2023-01-31
    数组 python
  • Java数据结构学习之树
    目录一、树1.1 概念1.2 术语1.3 树的实现1.3.1 用数组来实现一棵树?1.3.2 用链表实现一棵树?1.3.3 树的转化1.4 二叉树1.4.1 二叉树的性质1.4.2 ...
    99+
    2022-11-12
  • python学习之Python count()函数详解
    大家好,依旧是你们的萧萧啊。 Python中的count()函数是一种非常常用的方法,用于统计某个元素在列表、元组或字符串中出现的次数。它的使用非常简单,只需要传入要统计的元素作为参数即可。在本篇博客中,我将详细介绍count()函数的用法...
    99+
    2023-09-29
    学习 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作