![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
学习笔记--python基础
文章平均质量分 81
python知识点整理
迷茫中奋斗
这个作者很懒,什么都没留下…
展开
-
python学习笔记_第35天(汉诺塔)
汉诺塔的移动规则有三根柱子A,B,C(分别作为开始柱,中转柱,目标柱)。开始柱上有若干盘子,每次移动一块盘子,小盘只能叠在大盘的上面实现将所有盘子从开始柱全部移动到目标柱上。汉诺塔的抽象理解当只有一个盘子时,即移动一步,开始柱->目标柱当有两个盘子时,需要使用中转柱,先将小盘从开始柱->中转柱,再将大盘从开始柱->目标柱,最后将小盘从中转柱->目标柱以此类推,当有n个盘子时可以将(n-1)个小盘视为一个整体,此时就简化成了只有两个盘子时的情况。即先将(n-1)个小转载 2021-03-01 18:04:04 · 239 阅读 · 0 评论 -
python学习笔记_第34天(二叉树)
文章目录二叉树二叉树的基本概念二叉树的性质(特性)二叉树的节点表示以及树的创建二叉树的遍历深度优先遍历练习广度优先遍历(层次遍历)二叉树二叉树的基本概念二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)二叉树的性质(特性)在二叉树的第i层上至多有2^(i-1)个结点(i>0)深度为k的二叉树至多有2^k - 1个结点(k>0)对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则原创 2021-02-25 22:40:41 · 101 阅读 · 0 评论 -
python学习笔记_第33天(树与树算法)
文章目录树与树算法树的概念树的术语树的种类树的存储与表示顺序存储链式存储常见的一些树的应用场景树与树算法树的概念树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每原创 2021-02-24 22:29:14 · 89 阅读 · 0 评论 -
python学习笔记_第33天(二分法查找)
文章目录常见排序算法效率比较搜索二分法查找二分法查找实现时间复杂度常见排序算法效率比较搜索搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,因为该项目是否存在。 搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找二分法查找二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,原创 2021-02-24 20:53:23 · 105 阅读 · 0 评论 -
python学习笔记_第 32天(归并排序)
归并排序归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。归并排序的分析时间复杂度最优时间复杂度:O(nlogn)最坏时间复杂度:O(nlogn)稳定性:稳定...原创 2021-02-23 22:56:05 · 82 阅读 · 0 评论 -
python学习笔记_第31天(重点!快速排序)
文章目录希尔排序希尔排序过程希尔排序的分析时间复杂度归并排序归并排序的分析时间复杂度希尔排序希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序过程希尔排序的基本思想是:将数组列在一个表中并对列分别原创 2021-02-21 23:32:31 · 90 阅读 · 0 评论 -
python学习笔记_第30天(插入排序+重点!希尔排序)
文章目录插入排序插入排序分析时间复杂度快速排序快速排序的分析时间复杂度插入排序插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。插入排序分析时间复杂度最优时间复杂度:O(n) (升序排列,序列已经处于升序状态)最坏时间复杂度:O(n^2)稳定性:稳定快速排序快速排序(原创 2021-02-20 22:36:59 · 101 阅读 · 0 评论 -
python学习笔记_第30天(冒泡排序+选择排序)
文章目录排序与搜索排序算法的稳定性冒泡排序冒泡排序的分析时间复杂度选择排序选择排序分析时间复杂度排序与搜索排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。排序算法的稳定性稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题。然而,假设以下的数对将要原创 2021-02-20 20:20:49 · 113 阅读 · 0 评论 -
python学习笔记_第29天(栈+列队)
文章目录栈栈结构实现栈的操作栈操作具体实现队列队列的实现列队的操作列队操作具体实现双端队列双端列队的操作双端列队操作具体实现栈栈结构实现栈可以用顺序表实现,也可以用链表实现。栈的操作操作说明Stack()创建一个新的空栈push(item)添加一个新的元素item到栈顶pop()弹出栈顶元素peek()返回栈顶元素is_empty()判断栈是否为空size()返回栈的元素个数栈操作具体实现测试队列队列(queue)是原创 2021-02-19 23:15:35 · 118 阅读 · 0 评论 -
python学习笔记_第28天(线性表_链表2)
文章目录线性表链表双向链表双向链表的操作双向链表操作具体实现线性表链表双向链表前驱结点+数据+后继结点一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。双向链表的操作操作说明is_empty()链表是否为空length()链表长度travel()遍历链表add(item)链表头部添加append(item)链表原创 2021-02-18 23:17:55 · 75 阅读 · 0 评论 -
python学习笔记_第27天(线性表_链表1)
文章目录线性表链表线性表链表链表,将元素存放在通过链接构造起来的一系列存储块中。原创 2021-02-17 17:37:56 · 80 阅读 · 2 评论 -
python学习笔记_第26天(线性表_顺序表)
文章目录线性表顺序表顺序表的基本形式顺序表的结构与实现顺序表的结构顺序表的两种基本实现方式元素存储区扩充元素存储区替换顺序表的操作增加元素删除元素Python中的顺序表list的基本实现技术链表线性表数据类型决定了数据在计算机内存中的占用空间,和取数时计算机的读取规则(如连续的4个字节存储的是一个整数还是4个字符)。一个普通整形占4个字节,一个字节8位;一个字符占1个字节,即8位;地址占用4个字节。将一组数据元素作为整体管理和使用,最简单的解决方案便是将这样一组元素看成一个序列,用元素在序列里的位置和原创 2021-02-15 22:29:11 · 242 阅读 · 1 评论 -
python学习笔记_第26天(数据结构与算法)
文章目录常见时间复杂度Python内置类型性能分析list的操作测试数据结构算法与数据结构的区别抽象数据类型(Abstract Data Type)常见时间复杂度执行次数函数举例阶非正式术语12O(1)常数阶2n+3O(n)线性阶3n2+2n+1O(n2)平方阶5log2n+20O(logn)对数阶2n+3nlog2n+19O(nlogn)nlogn阶6n3+2n2+3n+4O(n3)立方阶2nO(2n)指数阶p原创 2021-02-15 18:41:13 · 171 阅读 · 1 评论 -
python学习笔记_第25天(数据结构与算法)
算法的引入练习:如果 a+b+c=1000,且 a ^2 +b ^2=c ^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?# 循环嵌套循环import timestart_time1 = time.time()for a in range(0, 1001): for b in range(0, 1001): for c in range(0, 1001): if a ** 2 + b ** 2 == c ** 2 and a +原创 2021-02-14 22:31:01 · 81 阅读 · 1 评论 -
python学习笔记_第24天(模块)
包package 的使用原创 2021-02-14 08:44:02 · 88 阅读 · 1 评论 -
python学习笔记_第23天(模块)
文章目录模块化(module)程序设计理念模块和包概念的进化史标准库模块+模块化编程模块化编程的流程模块化(module)程序设计理念模块和包概念的进化史“量变引起质变”本质上理解,随着数量的增加,管理方式会发生本质的变化;旧的管理方式完全不适合,必须采用新的管理方式。程序越来越复杂,语句多了,会将实现同一个功能的语句封装到函数中,统一管理和调用,于是函数诞生了。程序更加复杂,函数和变量多了,“物以类聚”将同一类型对象的“数据和行为”,也就是“变量和函数”,放到一起统一管理和调用,于是“类和对象原创 2021-02-09 23:35:50 · 136 阅读 · 1 评论 -
python学习笔记_第22天(文件操作--IO 技术)
shutil 模块(拷贝和压缩)shutil 模块是python 标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作。os 模块提供了对目录或文件的一般操作。shutil 模块作为补充,提供了移动、复制、压缩、解压等操作,这些os 模块都没有提供。shutil 模块 – 选择拷贝import shutil# copy 文件shutil.copyfile("a.txt", "a_copy.txt")# copy 目录,当拷贝的目录已存在时会报错(原创 2021-02-09 00:19:21 · 225 阅读 · 1 评论 -
python学习笔记_第21天(文件操作--IO 技术)
使用pickle 序列化Python 中,一切皆对象,对象本质上就是一个“存储数据的内存块”。有时候,我们需要将“内存块的数据”保存到硬盘上,或者通过网络传输到其他的计算机上。这时候,就需要“对象的序列化和反序列化”。序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。pickle.dump(obj, file) # obj 就是要被序列化的对象,file 指的是存储的文件pickle.load(file)原创 2021-02-06 22:46:47 · 1023 阅读 · 2 评论 -
python学习笔记_第20天(文件操作--IO 技术)
文本文件的读取文件的读取一般使用如下三个方法:read([size])从文件中读取size 个字符,并作为结果返回。如果没有size参数,则读取整个文件。读取到文件末尾,会返回空字符串。readline()读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。readlines()文本文件中,每一行作为一个字符串存入列表中,返回该列表# 读取一个文件前3个字符with open(r'c.txt', 'r', encoding='gbk') as f: str = f.rea原创 2021-02-05 23:44:20 · 94 阅读 · 0 评论 -
python学习笔记_第19天(文件操作--IO 技术)
文件操作(IO 技术)文本文件和二进制文件按文件中数据组织形式,我们把文件分为文本文件和二进制文件两大类。文本文件文本文件存储的是普通“字符”文本,python 默认为unicode 字符集(两个字节表示一个字符,最多可以表示:65536 个),可以使用记事本程序打开。但是,像word 软件编辑的文档不是文本文件。二进制文件二进制文件把数据内容用“字节”进行存储,无法用记事本打开。必须使用专用的软件解码。常见的有:MP4 视频文件、MP3 音频文件、JPG 图片、doc 文档等等。文件操作原创 2021-02-04 23:19:21 · 2704 阅读 · 0 评论 -
python学习笔记_第18天(异常和错误)
常见异常汇总异常名称说明ArithmeticError所有数值计算错误的基类AssertionError断言语句失败AttributeError对象没有这个属性BaseException所有异常的基类DeprecationWarning关于被弃用的特征的警告EnvironmentError操作系统错误的基类EOFError没有内建输入,到达EOF 标记Exception常规错误的基类FloatingPointError浮原创 2021-02-03 23:52:30 · 174 阅读 · 0 评论 -
python学习笔记_第17天(异常和错误)
异常机制没有异常机制的两个坏处:逻辑代码和错误处理代码放一起,结构混乱程序员本身需要考虑的例外情况较复杂,对程序员本身要求较高在没有异常机制的情况下的伪代码:#将d:/a.txt 拷贝到e:盘if "d:/a.txt"这个文件存在: if e 盘的空间大于a.txt 文件长度: if 文件复制一半IO 流断掉: 停止copy,输出:IO 流出问题! else: copyFile("d:/a.txt","e:/a.txt") # 核心功能代码 else: pr原创 2021-02-02 22:59:57 · 116 阅读 · 0 评论 -
python学习笔记_第16天(面向对象进阶)
特殊方法和运算符重载Python 的运算符实际上是通过调用对象的特殊方法实现的。a, b = 20, 30c = a + bd = a.__add__(b) # "+"在内存里的本质是特殊方法__add__print("c=", c)print("d=", d)当重写特殊方法时,即实现了“运算符的重载”。class Person: def __init__(self, name): self.name = name def __add__(self, o原创 2021-02-01 23:08:55 · 106 阅读 · 0 评论 -
python学习笔记_第15天(面向对象进阶)
面向对象三大特征介绍Python 是面向对象的语言,也支持面向对象编程的三大特性:封装(隐藏)、继承、多态。封装(隐藏)隐藏对象的属性和实现细节,只对外提供必要的方法。Python通过“私有属性、私有方法”的方式,实现“封装”。因为Python追求简洁的语法,所以没有严格的语法级别的“访问控制符”。私有属性、私有方法也可以通过【_类名__私有属性(方法)名】来外部调用,封装更多的是依靠程序员自觉实现。继承继承可以让子类具有父类的特性,提高了代码的重用性。从设计上是一种增量进化,原有父类设计不原创 2021-02-01 21:40:15 · 155 阅读 · 1 评论 -
python学习笔记_第14天(面向对象初级)
内存分析实例对象和类对象创建过程(重要)原创 2021-01-27 22:45:48 · 148 阅读 · 0 评论 -
python学习笔记_第13天(面向对象初级)
类的定义类也是对象,类是产生对象的对象,可以看做是type类型的模具。通过类来定义数据类型的属性(数据)和方法(行为),类是将属性和方法封装在一起。属性用来描述数据,方法(即函数)用来描述这些数据相关的操作。同一个类创建的对象,“方法代码是共享的,属性数据不共享”,即每个对象会共享这个类的行为(类中定义的函数方法),但会有自己的属性值(不共享状态)。类名必须符合“标识符”的规则;一般规定,首字母大写,多个单词使用“驼峰原则”。定义类的语法格式如下:class 类名:类体class GoodStu原创 2021-01-23 23:37:23 · 121 阅读 · 0 评论 -
python学习笔记_第12天(函数+面向对象初级)
嵌套函数(内部函数)在函数内部定义的函数。inner()的定义和调用都在outer()函数内部,直接调用inner()函数报错,需要通过调用outer()函数,从而调用与其封装的inner()函数。嵌套函数的特点:封装- 数据隐藏外部无法访问“嵌套函数”。贯彻DRY(Don’t Repeat Yourself)原则嵌套函数,可以让我们在函数内部避免重复代码。闭包# 以正确格式打印姓名def printChineseName(name, familyName): print("{原创 2021-01-22 00:00:48 · 168 阅读 · 0 评论 -
python学习笔记_第11天(函数)
参数的类型位置参数函数调用时,实参默认按位置顺序传递,实参个数和形参需完全匹配。按位置传递的参数,称为“位置参数”。def f1(a,b,c): print(a,b,c) f1(2,3,4) # 2 3 4,默认按形参顺序,赋值参数f1(2,3) # 报错,与形参个数不匹配,位置传递报错命名参数按照形参的名称传递参数,称为“命名参数”,也称“关键字参数”。def f1(a, b, c): print(a, b, c) f1(c=2, a=3, b=原创 2021-01-20 23:11:10 · 347 阅读 · 0 评论 -
python学习笔记_第10天(函数)
全局变量和局部变量全局变量:在函数和类定义之外声明的变量。作用域为定义的整个模块,从定义位置开始直到模块结束。全局变量会降低函数的通用性和可读性。应尽量避免全局变量的使用。全局变量一般做常量使用。函数内要改变全局变量的值,需要使用global 声明。局部变量:在函数体中声明的变量(包含形式参数)。局部变量的引用比全局变量快,优先考虑使用。如果局部变量和全局变量同名,则在函数内就近使用同名的局部变量。a = 100 # 在函数和类定义之外声明的全局变量,整个模块都能调用def原创 2021-01-19 23:21:03 · 101 阅读 · 0 评论 -
python学习笔记_第9天(函数)
函数函数不仅可以实现代码的复用,更能实现代码的一致性,当修改函数的代码,所有调用该函数的地方都统一修改。函数的基本概念函数是代码的封装,用于实现一个功能函数可以反复调用、传递参数、返回计算结果Python 中函数分为如下几类:内置函数如str()、list()、len()等内置函数,可以拿来直接使用。标准库函数可以通过import 语句导入库,然后使用其中定义的函数。第三方库函数从Python 社区下载安装第三方库后,通过import 语句导入,然后使用这些第三方库的函数。原创 2021-01-18 21:58:37 · 92 阅读 · 0 评论 -
python学习笔记_第8天(循环语句+推导式)
控制语句循环结构原创 2021-01-17 23:39:47 · 344 阅读 · 0 评论 -
python学习笔记_第7天(字典底层原理+选择结构)
字典:(拓展–重要)字典核心底层原理字典对象的核心是散列表,散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做bucket。每个bucket 有两部分:一个是键对象的引用,一个是值对象的引用。又因所有bucket 结构和大小一致,就可以通过偏移量来读取指定bucket。将一个键值对放进字典的底层过程创建一个空字典,假设字典a 对象创建完后,数组长度为8。创建一个键值对"name"=“张三”,把这个键值对放到字典对象a中第一步需要计算键”name”的散列值。Python 中可以通过原创 2021-01-16 23:43:19 · 185 阅读 · 0 评论 -
python学习笔记_第6天(元组+字典)
元组tuple列表属于可变序列,可以任意修改列表中的元素。元组属于不可变序列,不能修改元组中的元素。因此,元组没有增加元素、修改元素、删除元素相关的方法。元组的核心特点是:不可变序列。元组的访问和处理速度比列表快。与整数和字符串一样,元组可以作为字典的键(不可在原地址更改),列表则永远不能作为字典的键使用。元组支持如下操作:索引访问切片操作连接操作成员关系操作比较运算操作元组长度len()、最大值max()、最小值min()、求和sum()等。元组的创建()创建元组原创 2021-01-15 23:56:10 · 254 阅读 · 0 评论 -
python学习笔记_第5天(列表)
列表对象的常用函数列表元素访问通过索引直接访问+切片索引区间在[0, 列表长度-1]这范围内,超过这个范围则会抛出异常。列表的索引直接访问和切片都与字符串操作类似,切片的格式如下:[起始偏移量:终止偏移量[:步长]]注:切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]这个范围,也不会报错。起始偏移量小于0 则会当做0,终止偏移量大于“长度-1”会被当成”长度-1”。a = [1,2,3,4,5,6,7,8,9]a[2] # 3a[:] # [1, 2, 3, 4,原创 2021-01-14 22:08:51 · 96 阅读 · 0 评论 -
python学习笔记_第4天(列表)
序列序列是一种数据存储方式,用来存储一系列的数据。在内存中,序列是一块用来存放多个值的连续内存空间。空间内存放所指对象的id,如a = [10,20,30,40]变量a指向序列块的id地址,序列块中每一个存放位指向对应元素的id地址。定义一个序列,先在堆中新建序列元素对象,再建序列块,序列块大小可变,序列块中存储元素对象的id地址,变量a建在栈中存放序列块id地址。python中常用的序列结构有:字符串、列表、元组、字典、集合。列表列表是内置可变序列,用于存储任意数目、任意类型的数据集合。列表原创 2021-01-13 22:14:57 · 141 阅读 · 0 评论 -
python学习笔记_第3天(字符串)
字符串字符串的编码Python3 支持Unicode,可表示世界上任何书面语言的字符.Python3 的字符默认就是16 位Unicode 编码,ASCII 码是18位,是Unicode 编码的子集.内置函数ord()可以把字符转换成对应的Unicode 码;chr()可以把十进制数字转换成对应的字符ord('湛') # 28251ord('B') # 66chr(38472) # 陈chr(73) # I创建字符串通过单引号或双引号创建字符串,如a=’abc’; b=”123”原创 2021-01-12 23:26:49 · 152 阅读 · 0 评论 -
python学习笔记_第2天(变量+运算符)
变量的声明和赋值Python 没有语法规则限制改变一个常量的值,不支持常量.所以通过约定常量的命名规则,在程序的逻辑上不对常量的值做修改链式赋值链式赋值用于同一个对象赋值给多个变量x=y=123 相当于:x=123; y=123系列解包赋值系列数据赋值给对应相同个数的变量(个数必须保持一致)a,b,c=4,5,6 相当于:a=4;b=5;c=6常使用系列解包赋值实现变量交换a,b=1,2a,b=b,aprint(a,b) # 2,1最基本内置数据类型和运算符python原创 2021-01-11 22:11:03 · 138 阅读 · 3 评论 -
python学习笔记_第1天(turtle模块+基础概念)
IDLE -> F1 调出python帮助文档第一章.趣味练习导入turtle模块绘制奥运五环import turtle # 导入作图模块turtle.width(10) # 加粗笔触turtle.color("blue")turtle.circle(50) # 以起始点为原点坐标,向上方逆时针绘制半径为50的圆turtle.penup() # 抬笔,避免移动作图点时划线turtle.goto(120,0)turtle.pendown() # 落笔,来时作图原创 2021-01-10 20:22:13 · 252 阅读 · 0 评论