目录

一:python内部数据类型分类

二:各数据结构

一:python内部数据类型分类

  这里有个很重要的东西要先提醒注意一下:原子性数据类型和非原子性数据类型的区别

   Python内部数据从某种形式上可以分为两种:

      其一是原子性数据类型:int,float,str

      其余的是非原子性的(按有序性分):

        有序的:list, tuple

        无序的:set, dict

那么什么是原子性呢,在第一篇讲赋值语句时有个例子:

赋值语句:x = 6

其实这个过程是建立了一个指向(reference),左边的是指向,右边的是一个对象(object)或者一个有指向对象的指向,可以有多个指向指向同一个对象(object),[注意此地对象的意思,可以是值,实例,函数等等], 综上,此地时建立了一个叫x的变量(variable)让其拥有object 6的reference

      注意:

        >>> a=[1,2,3,4]                                                >>> a=1

        >>> b=a                                                            >>> b=a

        >>> a[0]=None                                          >>> a=2

        >>> b                                                                 >>> b

          [None, 2, 3, 4]                                                1

        这里就出现了一个很奇怪的现象了,左边的b跟着a变而右边的没有,其实这就是因为int为原子性数据结构带来的。可以认为原子性数据所在内存地址是固定的,这样改变了a变量的值就是改变了a变量指向的地址。而非原子性改变a就是改变了a所指内存地址所存储的东西而没有改变a指向的地址。这样就能够解释通了。

      另一个有趣的例子:

        my_list = [1,2,3]

        A = [my_list]*3

        --à[1,2,3,1,2,3,1,2,3]

        变量A是三个my_list的reference的集合,my_list某个元素的改变都会折射到其上

二:各数据结构

  下面会挨个说明这些内建数据结构各种方法的时间复杂度:

  1:String

   先回顾一下前面讲过string只有accessor method,故其所有方法都是不会改变其本身的,只是取出来做了些处理。

    

  2:List

    

         

      e.g:解析下面代码大O函数值:

        def anagram_solution2(s1,s2):

          a_list1 = list(s1)    a_list2 = list(s2)

          a_list1.sort()       a_list2.sort()

          pos = 0

          matches = True

          while pos < len(s1) and matches:

            if a_list1[pos] == a_list2[pos]:

              pos = pos + 1

            else:

              matches = False

          return matches

        print(anagram_solution2('abcde','edcba'))

             如果不假思索的话我们会写出g(n)= n/2 + 7,则O(n) = n

             其实再对照表2.2发现sort方法为O(nlogn),高阶于n,故O(n)=nlogn

        说明一下:对于list,学过C语言的应该还记得其实就是利用了下标对应于起始元素的内存地址能够在O(1)计算时间找到下标为任意的元素,故list的任意元素的访问时间为O(1),若在访问了的基础上做的都是O(1)操作则自然就是O(1)啦,若做了其他的高阶操作则就是后者了。其中有个有趣的是pop()与pop(i)的不同,由于list是顺序结构,故在删除中间元素时其后所有元素要前移,故pop(i)最坏情况是pop(0),即是O(n)结合其他看起来,list是一个优于访问,败于增删的数据结构类型

  

  3:Set

    

    

         

    

      #注意啊,表1.5是set的计算符号,表1.6是set的方法

              *创建set:a = { 12,’pd’,True,None }

      #其时间复杂度的原理和dict一起在后面讲解

  4:dict

    

    

            

      从中可以看出痛过key获得元素的速度与list相同是O(1)的,其原理与set一起在后面说,本质上其key是通过hash函数转化作为list下标存在list中的,故与list一样是O(1),但是实际比list访问慢一些,且有可能不是O(1)

  

python 下的数据结构与算法---3:python内建数据结构的方法及其时间复杂度的更多相关文章

  1. 数据结构与算法(Python)

    数据结构与算法(Python) Why? 我们举一个可能不太恰当的例子: 如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰 ...

  2. Python中3种内建数据结构:列表、元组和字典

    Python中3种内建数据结构:列表.元组和字典 Python中有3种内建的数据结构:列表.元组和字典.参考简明Python教程 1. 列表 list是处理一组有序项目的数据结构,即你可以在一个列表中 ...

  3. 数据结构和算法(Golang实现)(11)常见数据结构-前言

    常见数据结构及算法 数据结构主要用来组织数据,也作为数据的容器,载体. 各种各样的算法,都需要使用一定的数据结构来组织数据. 常见的典型数据结构有: 链表 栈和队列 树 图 上述可以延伸出各种各样的术 ...

  4. 数据结构和算法(Golang实现)(12)常见数据结构-链表

    链表 讲数据结构就离不开讲链表.因为数据结构是用来组织数据的,如何将一个数据关联到另外一个数据呢?链表可以将数据和数据之间关联起来,从一个数据指向另外一个数据. 一.链表 定义: 链表由一个个数据节点 ...

  5. 数据结构和算法(Golang实现)(13)常见数据结构-可变长数组

    可变长数组 因为数组大小是固定的,当数据元素特别多时,固定的数组无法储存这么多的值,所以可变长数组出现了,这也是一种数据结构.在Golang语言中,可变长数组被内置在语言里面:切片slice. sli ...

  6. 数据结构和算法(Golang实现)(14)常见数据结构-栈和队列

    栈和队列 一.栈 Stack 和队列 Queue 我们日常生活中,都需要将物品排列,或者安排事情的先后顺序.更通俗地讲,我们买东西时,人太多的情况下,我们要排队,排队也有先后顺序,有些人早了点来,排完 ...

  7. 数据结构和算法(Golang实现)(15)常见数据结构-列表

    列表 一.列表 List 我们又经常听到列表 List数据结构,其实这只是更宏观的统称,表示存放数据的队列. 列表List:存放数据,数据按顺序排列,可以依次入队和出队,有序号关系,可以取出某序号的数 ...

  8. 数据结构和算法(Golang实现)(16)常见数据结构-字典

    字典 我们翻阅书籍时,很多时候都要查找目录,然后定位到我们要的页数,比如我们查找某个英文单词时,会从英语字典里查看单词表目录,然后定位到词的那一页. 计算机中,也有这种需求. 一.字典 字典是存储键值 ...

  9. 数据结构和算法(Golang实现)(17)常见数据结构-树

    树 树是一种比较高级的基础数据结构,由n个有限节点组成的具有层次关系的集合. 树的定义: 有节点间的层次关系,分为父节点和子节点. 有唯一一个根节点,该根节点没有父节点. 除了根节点,每个节点有且只有 ...

随机推荐

  1. css画小米、遨游logo

    狠简单的2个Logo,用纯css写出来,觉得挺好玩的. <!DOCTYPE html> <html> <head> <meta charset="u ...

  2. PHP学习系列(1)——字符串处理函数(3)

    11.crc32() 函数计算一个字符串的 crc32 多项式.生成 string 参数的 32 位循环冗余校验码多项式.该函数可用于验证数据的完整性. 语法:crc32(string) 注意:由于 ...

  3. Flume笔记--source端监听目录,sink端上传到HDFS

    官方文档参数解释:http://flume.apache.org/FlumeUserGuide.html#hdfs-sink 需要注意:文件格式,fileType=DataStream 默认为Sequ ...

  4. Solr 单机配置

    一. 准备软件 提前安装好Java1.8和Tomcat9 下载Solr6.1,官网位置:http://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/6 ...

  5. START WITH CONNECT BY PRIOR 链表查询

    使用场景:排序 设计思路,id为主键,index为顺序,index存前一个节点的id,当然,按照这个思路可以实现双向链表的(preindex存前一个节点,nextindex存下一个节点) 这样的话排序 ...

  6. 以前5年只专注于.net,现今开始学习java.

    从2011年毕业至今一直在学习.net和c#,大概几年6月份底开始研究java了. 虽然不知道以后的路是否好走,但是我依然会努力.不放弃! 写这篇文字是为了鼓励自己,也为这段时光留下记忆.加油,红红!

  7. Fireworks Extension —— 开发篇(Dom模型)

    如上一篇博文所叙述的,一个很偶然的机会,我得知可以使用Javascript开发Fireworks插件,又注意到了视觉小伙伴的需求,于是便上手开发Fireworks Extension了. 很幸运的,在 ...

  8. C/C++跨平台的的预编译宏

    我们在编译一些跨平台的程序的时候难免会遇到_WIN32  __linux__什么之类的SDK或者编译器环境预定义的宏.有很多,之前还分不清_WIN32 和WIN32的区别.不过这里还好有个列表,做个备 ...

  9. HDOJ 1420 Prepared for New Acmer(DP)

    Problem Description 集训进行了将近2个礼拜,这段时间以恢复性训练为主,我一直在密切关注大家的训练情况,目前为止,对大家的表现相当满意,首先是绝大部分队员的训练积极性很高,其次,都很 ...

  10. HDU3726---Graph and Queries 离线处理+Treap

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3726 题意:n个点m条边的一张无向图,每个点有一个权值, 有3中操作. D X 删除第X条边 Q X ...