目录

一: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. 通过枚举enum实现单例设计

    一.枚举 通过enum关键字来实现枚举,在枚举中需要注意的有: 1. 枚举中的属性必须放在最前面,一般使用大写字母表示 2. 枚举中可以和java类一样定义方法 3. 枚举中的构造方法必须是私有的 通 ...

  2. 2013中国大数据技术大会——BDTC2013

    阿里飞天平台总架构师唐洪分享了飞天开放平台. 飞天平台特点:同时支持在线和离线应用:安全控制:分布式部署,监控和诊断:无单点故障,可用性99.9%:数据3副本,数据可靠性“10个9”. 阿里飞天平台总 ...

  3. scss组件定制的一些学习

    应组织上的要求,简化前端开发,提高工作效率,开始着手研究scss框架及组件化. 把一些长的像的弄在一起,就有了组件化. 但组件只用一部分需要的,就有了定制. 下面是参考一个button组件写出的一些简 ...

  4. 怎么把QQ我的收藏表情图片转移到另一台电脑上

    把收藏的QQ表情从一台电脑转移到另一台电脑的操作步骤如下:    1.在有表情的电脑登陆QQ,随便打开一个聊天窗口,点击[表情],选择[表情设置],点击[导入导出表情包],选择[导出全部表情包]:   ...

  5. 一句话输出NGINX日志访问IP前十位排行

    AWK的数组字段自增加,然后取值的方法,要记得哟. 还有,SORT指定列排行,也常用的.

  6. 用TMS的控件就可以了,有bug叫他们改

    [深圳]大宝delphi本身不是太隐定.不建议弄太多自己的东西.还要debug好长时间.为了快.便不去弄控件了够用了.真的.都不用花太多时间去弄这弄那.有bug叫他们改便可以.

  7. 64位linux中使用inet_ntoa报错处理

    最近一直使用linux mint 15,我用的是64位操作系统,在进行网络编程的时候,发现一个问题,请看源码: /*get_ip_by_name.c*/ #include <stdio.h> ...

  8. Sublime Text2不自动打开最近的项目

    1.首选项 2.设置默认 "hot_exit": false, "remember_open_files": false, 这两个值改成false就可以了

  9. 2015.9.11模拟赛 codevs 4160【会玩的】

    题目描述 Description hzwer真的很会玩啊…他有一个n*m的方格,每次可以给方格添加一整行或一整列,但是不能删除.现在他想要让总格子数超过k个,但是又想让总格子数尽可能小.请找出这时的n ...

  10. cf500C New Year Book Reading

    C. New Year Book Reading time limit per test 2 seconds memory limit per test 256 megabytes input sta ...