python 下的数据结构与算法---3:python内建数据结构的方法及其时间复杂度
目录
一: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内建数据结构的方法及其时间复杂度的更多相关文章
- 数据结构与算法(Python)
数据结构与算法(Python) Why? 我们举一个可能不太恰当的例子: 如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰 ...
- Python中3种内建数据结构:列表、元组和字典
Python中3种内建数据结构:列表.元组和字典 Python中有3种内建的数据结构:列表.元组和字典.参考简明Python教程 1. 列表 list是处理一组有序项目的数据结构,即你可以在一个列表中 ...
- 数据结构和算法(Golang实现)(11)常见数据结构-前言
常见数据结构及算法 数据结构主要用来组织数据,也作为数据的容器,载体. 各种各样的算法,都需要使用一定的数据结构来组织数据. 常见的典型数据结构有: 链表 栈和队列 树 图 上述可以延伸出各种各样的术 ...
- 数据结构和算法(Golang实现)(12)常见数据结构-链表
链表 讲数据结构就离不开讲链表.因为数据结构是用来组织数据的,如何将一个数据关联到另外一个数据呢?链表可以将数据和数据之间关联起来,从一个数据指向另外一个数据. 一.链表 定义: 链表由一个个数据节点 ...
- 数据结构和算法(Golang实现)(13)常见数据结构-可变长数组
可变长数组 因为数组大小是固定的,当数据元素特别多时,固定的数组无法储存这么多的值,所以可变长数组出现了,这也是一种数据结构.在Golang语言中,可变长数组被内置在语言里面:切片slice. sli ...
- 数据结构和算法(Golang实现)(14)常见数据结构-栈和队列
栈和队列 一.栈 Stack 和队列 Queue 我们日常生活中,都需要将物品排列,或者安排事情的先后顺序.更通俗地讲,我们买东西时,人太多的情况下,我们要排队,排队也有先后顺序,有些人早了点来,排完 ...
- 数据结构和算法(Golang实现)(15)常见数据结构-列表
列表 一.列表 List 我们又经常听到列表 List数据结构,其实这只是更宏观的统称,表示存放数据的队列. 列表List:存放数据,数据按顺序排列,可以依次入队和出队,有序号关系,可以取出某序号的数 ...
- 数据结构和算法(Golang实现)(16)常见数据结构-字典
字典 我们翻阅书籍时,很多时候都要查找目录,然后定位到我们要的页数,比如我们查找某个英文单词时,会从英语字典里查看单词表目录,然后定位到词的那一页. 计算机中,也有这种需求. 一.字典 字典是存储键值 ...
- 数据结构和算法(Golang实现)(17)常见数据结构-树
树 树是一种比较高级的基础数据结构,由n个有限节点组成的具有层次关系的集合. 树的定义: 有节点间的层次关系,分为父节点和子节点. 有唯一一个根节点,该根节点没有父节点. 除了根节点,每个节点有且只有 ...
随机推荐
- win7下搭建nginx+php的开发环境
本来在win7下用的是IIS做web服务器,但近来因项目需求的原因,需要在服务器遇到404错误的时候自动做转向(不是在客户端的跳转,而是在服务器收到客户端请求去某目录下读取文件返回时,如果发现目录或目 ...
- 监听<input/>标签行为的方法总结
一.内容改变 1.<input onchange="javascript:function()"/>方法 onchange可以替换为下面几种:oninput,onpro ...
- Extjs中grid表头内容居中
在每一列中加上header属性即可,源码: header:'<div style=" text-align: center; vertical-align: middle;" ...
- ThinkPHP实现RBAC
RBAC: role base access control 基于角色的用户访问权限控制 不同人员登录系统要显示不同的菜单项目 1.传统方式权限设置: 具体操作权限与用户直接联系:
- IIS开启伪静态后html静态页面无法访问的解决方法
IIS开启伪静态后,发现原本存在的html静态页面无法访问了,显示的404错误.网上查了下,是因为实现伪静态就是使用 URLRewriter 来映射后缀,会把asp等动态页面映射成html,但是原来存 ...
- js本地存储解决方案(localStorage与userData)
WEB应用的快速发展,是的本地存储一些数据也成为一种重要的需求,实现的方案也有很多,最普通的就是cookie了,大家也经常都用,但是cookie的缺点是显而易见的,其他的方案比如:IE6以上的user ...
- php过滤参数特殊字符防注入
分享一例php实现过滤提交的参数数据以防止注入的代码,有需要的朋友参考下. 本节内容: php过滤特符字符,php防注入. in: 后端程序 例子: 代码示例: <?php /** * 安全防范 ...
- 在选择“Add Library Package reference”时提示:无法加在一个或多个请求的类型,有关更多信息,请检索LoaderException属性
- 清除oracl中有主外键关联的表中的部分数据。
1.禁用主外键BEGINfor c in (select 'ALTER TABLE '||TABLE_NAME||' DISABLE CONSTRAINT '||constraint_name||' ...
- 『局域网安全』利用ARP欺骗劫持Cookie
0x 00 ARP欺骗说明 欺骗原理相关内容就不多叙述了,百度一大堆 实施ARP欺骗在Windows下,Linux下都相关工具 由于在Linux下可以开启ip_forward功能,个人认为Linux下 ...