python 下的数据结构与算法---1:让一切从无关开始
这段时间把《Data Structure and Algorithms with python》以及《Problem Solving with Algorithms and DataStructures》看完了(图那部分没仔细看,毕业设计开始了,有点忙)。现在开始写点总结啦,主要顺序按照是problem solving那本书的,感觉这本条理更加清晰简单,而另一本相对杂乱些,不过其代码写的更pythonic一些。【github地址,包含了那两本书带笔记版以及下面零的代码】
这作为第一篇总结笔记就从点无关的开始吧(也就是这两本书中提到的python相关但是与数据结构和算法无关的东东)【此后我尽量每天晚上更新一篇】
目录:
零:有些什么东西
一:几句对于python的闲语总结
二:python的赋值语句会发生什么
三:类的两种方法:访问方法与突变方法
四:python的变量查找机制
五:python程序运行内存机制
*六:运算符重载&类的内建方法
零:有些什么东西:

一:几句对于python的闲语总结:
Python为解释性语言,用解释器(interpreter)运行
Python为动态语言,程序中不需要固定变量类型,同一个变量前后可以调用不同类型。
Python为面对对象语言,其所有的数据结构都是对象。(注:若看文档遇到Type,其实就是表示class,type是元类,用于构建类。x.__class__.__class__)
二:python的赋值语句会发生什么
赋值语句:x = 6
其实这个过程是建立了一个指向(reference),左边的是指向,右边的是一个对象(object)或者一个有指向对象的指向,可以有多个指向指向同一个对象(object),[注意此地对象的意思,可以是值,实例,函数等等],
综上,此地时建立了一个叫x的变量(variable)让其拥有object 6的reference
注意:
>>> a=[1,2,3,4]
>>> b=a
>>> a[0]=None
>>> b
[None, 2, 3, 4]
此地可以看出,其实指向就是指向了物理地址的一堆东西,一变都变。
三:类的两种方法
所有面对对象语言中都有两种方法:
访问方法(accessor method)与突变方法(mutator method)
访问方法取得对象来用但是不改变对象,而突变方法就是改变对象:
>>> a[::-1]
[5, 4, 3, 2, 1]
>>> a
[1, 2, 3, 4, 5]
>>> a.reverse()
>>> a
[5, 4, 3, 2, 1]
其实自己写过类就能够发现这两种的不同,大概访问方法就是用来return一些想要的值的,突变方法是用来改变对象内容的,一般也可以不return。
一个类如果没有访问方法那就是只能放数据不能取数据,那没什么意义。而一个类如果没有突变方法那就是不可变数据了,str,int等等数据类型就是这样的。
四:python的变量查找机制
python变量查找最先分为两步:首先在local scope查找,如绿色的val,先在绿色区域查找,没有再在encloding scope查找,即是浅红色区域

前面说到了local scope与enclosing scope,其实我们最熟的是global scope,即全局变量
用法:
x=0
def aha():
global x
…
最后有python的Build-in scope:
例如在函数中写了x=int(‘6’),
会依次寻找对象int函数是否在local scope,enclosing scope,
Global scope,最后看build-in scope
总结起来就是LEGB的查找顺序。
五:python的内存机制
从中也可以看出其实每个函数或者类都有个自己的内存空间,其实python在运行时,将使用两部分来运行,其都是在RAM(随机存储器)中的,两部分就是一个heap(堆)以及一个run-time stack(时间运行堆),当python解释器(interpreter)执行到某个函数是,将其对应的Activation Record压入run-time stack并且开辟一段新的scope,注意,所有local scope拥有的object都存储在Heap中,Activation Record中有他们的references,一旦函数执行完成,Activation Record弹出,下一个进入时会指向另一段scope。【见下图】
*说到RAM,如果你没有概念,先知道他可以以O(1)时间访问任意地址的元素即可,这很重要,直接说明了为何有些数据结构访问元素时间复杂度为O(1)

e.g:看下面递归的内存处理过程
def recSumFirstN(n):
if n == 0:
return 0
return recSumFirstN(n-1) + n



*六:运算符重载&类的内建方法
下表写明了一些常见的内建方法,在这里我讲了其中的一些

python 下的数据结构与算法---1:让一切从无关开始的更多相关文章
- python 下的数据结构与算法---8:哈希一下【dict与set的实现】
少年,不知道你好记不记得第三篇文章讲python内建数据结构的方法及其时间复杂度时里面关于dict与set的时间复杂度[为何访问元素为O(1)]原理我说后面讲吗?其实就是这篇文章讲啦. 目录: 一:H ...
- python 下的数据结构与算法---4:线形数据结构,栈,队列,双端队列,列表
目录: 前言 1:栈 1.1:栈的实现 1.2:栈的应用: 1.2.1:检验数学表达式的括号匹配 1.2.2:将十进制数转化为任意进制 1.2.3:后置表达式的生成及其计算 2:队列 2.1:队列的实 ...
- python 下的数据结构与算法---6:6大排序算法
顶先最后推荐:哈哈,意思是放到顶部强调其重要性,但是应该我总结的六种算法看完了后再看的一篇醍醐灌顶的文章 一:冒泡排序(Bubble Sort) 原理:假设有n个数,第一轮时:从第一个元素开始,与相邻 ...
- python 下的数据结构与算法---3:python内建数据结构的方法及其时间复杂度
目录 一:python内部数据类型分类 二:各数据结构 一:python内部数据类型分类 这里有个很重要的东西要先提醒注意一下:原子性数据类型和非原子性数据类型的区别 Python内部数据从某种形式上 ...
- python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表
目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...
- python 下的数据结构与算法---7:查找
一:线性查找(Sequential Search) 线性查找可以说是我们用的最早也会是用的最多的查找方式了.其对应的是线性数据结构,回顾一下线性数据结构,其特点是先后加入的元素是有顺序的,相邻的.而线 ...
- python 下的数据结构与算法---5:递归(Recursion)
定义:递归就是不断分割整体成部分直到可以轻易解决分割出来的部分. 递归表达式三定律: 1:递归表达式必须有个最小单元 (最小单元既是停止递归调用以及能够直接运算的) 2:递归表达式在运算过程中 ...
- Python实现的数据结构与算法之队列详解
本文实例讲述了Python实现的数据结构与算法之队列.分享给大家供大家参考.具体分析如下: 一.概述 队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操 ...
- 用Python实现的数据结构与算法:开篇
一.概述 用Python实现的数据结构与算法 涵盖了常用的数据结构与算法(全部由Python语言实现),是 Problem Solving with Algorithms and Data Struc ...
随机推荐
- zepto源码研究 - ajax.js($.ajax具体流程分析)
简要:$.ajax是zepto发送请求的核心方法,$.get,$.post,$.jsonp都是封装了$.ajax方法.$.ajax将jsonp与异步请求的代码格式统一起来,内部主要是先处理url,数据 ...
- IEnumerable中的 Any方法
IEnumerable类中的 Any方法,表示集合中有任何一元素满足条件,返回就true , 该方法有两个重载 1. 不带任何参数,表示集合中有元素 2. 参入一个 Func<TSource, ...
- [转]100个经典C语言程序(益智类问题)
目录: 1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数的尾数 8.借书方案知多少 9.杨辉三角形 10.数制转换 11.打鱼还是晒网 12.抓交通肇事 ...
- AtomicInteger小小的理解
这里仅仅是验证多线程环境下,AtomicInteger的安全性. 通过源码不难发现两点: 1.value属性是volatile修饰 2.使用了unsafe的CAS操作 通过上述两点,实现非阻塞同步(乐 ...
- LDMFD和STMFD个人理解
ARM里面的堆栈是满递减(FULL DESCENDING)的.SP指向最后一个入栈的数据,SP的地址由高向低生长.对于LDM和STM指令来说,编号小的寄存器对应堆栈中的低地址. STMFD的寻址方式是 ...
- Spark任务调度流程及调度策略分析
Spark任务调度 TaskScheduler调度入口: (1) CoarseGrainedSchedulerBackend 在启动时会创建DriverEndPoint. 而DriverE ...
- JavaScript 中的数字和日期类型
本章节介绍如何掌握Javascript里的数字和日期类型 数字EDIT 在 JavaScript 里面,数字都是双精度浮点类型的 double-precision 64-bit binary form ...
- iOS 9之应用内搜索(CoreSpotlight)API
金田(github 示例源码) 前言 在iOS9之前我们只能使用Spotlight来搜索应用名称来打开指定App,而其他的内容都是提供给系统使用(信息,联系人,邮件等).在iOS9以后Apple允许开 ...
- java与数据结构(3)---java实现循环链表
循环链表:将单链表中尾结点的指针由空指针改为指向头结点,就使整个单链表形成一个环,这种首尾相接的单链表称为单链表循环表,即循环链表. 循环链表与单链表最重要的区别是:尾结点的指针,不再是p->n ...
- Java中setCharAt()方法介绍
--转载自网络,备忘 这是StringBuffer类里面的一个方法:主要是用来替换的,方法里面有两个参数setCharAt(int index,Char ch),第一个参数是取代的位置 索引从0开始 ...