- 博客(107)
- 收藏
- 关注
原创 python实现贪心算法
贪心算法在对问题求解时,总是作出在当前看来是最好的选择。也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解(是否是全局最优,需要证明)。最优装载问题问题: 有一天海盗们截获了一艘装满各种各样古董的货船,每一件都价值连城,一旦打碎就是去了价值,海盗船载重量为C,每件固定的重量为wi,海盗们该如何尽可能装载最多数量的古董呢?解决思路:古董的种量清单:船载重量固定为C,只要每次选择重量最小的古董,直到不能再装为止,这样装载的古董数量最大, 这就是贪心策略;把古董按重量从小到大
2020-06-21 21:14:48
663
原创 Python实现顺序查找和二分查找算法
查找表查找表是由同一类型的数据元素构成的集合。例如电话号码簿和字典都可以看作是一张查找表。一般对于查找表有以下几种操作:在查找表中查找某个具体的数据元素;在查找表中插入数据元素;从查找表中删除数据元素;静态查找表与动态查找表在查找表中只做查找操作,而不改动表中数据元素,称此类查找表为静态查找表;在查找表中做查找操作的同时进行插入数据或者删除数据的操作,称此类表为动态查找表。关键字关键字又细分为主关键字和次关键字。若某个关键字可以唯一地识别一个数据元素时,称这个关键字为主关键字,例如
2020-06-21 21:08:13
748
原创 Python实现排序算法
排序算法常用术语稳定与不稳定稳定: 如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定: 如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序与外排序内排序: 所有排序操作都在内存中完成;外排序: 由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;排序算法的性能三大影响因素1 . 时间性能(时间复杂度): 一个算法执行所耗费的时间。2. 辅助空间 (空间复杂度): 运行完一个程序所需内存的大小。3. 算法的复杂性 : 算法本身
2020-06-21 20:59:05
389
原创 Python实现八皇后问题(详细注释)
回溯法在了解八皇后问题之前我们先了解什么是回溯法,因为八皇后问题是回溯法的一个经典算法习题,也是八皇后问题用到的主要算法。根据百度百科解释:回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。举个集合小例子:列举集合 {1,2,3} 中所有子集的问题使用回溯法。从集合的开头元素开始,对每个元素都有两种操作,直到集合最
2020-06-19 19:46:16
22146
4
原创 平衡二叉树(AVL)
一、什么是平衡二叉树?平衡二叉树: 又称为AVL树 ,它或者是一棵空树,或者是具备以下性质的二叉排序树:每棵子树中的左子树和右子树的深度差(平衡因子)的绝对值不能超过1;二叉树中每棵子树都要求是平衡二叉树;一棵AVL树必须满足以下条件:条件一:必须是二叉排序树条件二:每个节点的左子树和右子树的高度差的绝对值至多为1。也就是说,平衡二叉树的前提是它是一棵二叉排序树平衡二叉树的查找、插入、删除操作在平均和最坏的情况下都是O(logn),这得益于它时刻维护着二叉树的平衡。二、平衡二叉树的
2020-06-19 19:14:39
1897
原创 Python实现二叉排序树
一、什么是二叉排序树?二叉排序树要么是一棵空二叉树,要么是具有如下特点的二叉树:二叉排序树中,如果其根结点有左子树,那么左子树上所有节点的值都小于根结点的值;二叉排序树中,如果其根结点有右子树,那么右子树上所有节点的值都大于根结点的值;二叉排序树的左右子树也要求都是二叉排序树。如下图所示:二、二叉排序树的Python实现二叉排序树的插入插入: 从根结点开始逐个与关键字进行比较,小于根结点去左边,大于根结点去右边,碰到子树为空的情况指向关键字。二叉排序树的查找查找: 对比节点的值和关
2020-06-15 13:20:30
1624
原创 二叉树练习题及解析
1、 某二叉树的前序序列和后序序列正好相反,则该二叉树一定是( )的二叉树。答:高度等于其节点数解析:前序遍历顺序是‘M-L-R’,后序遍历的顺序是‘L-R-M’,其中L-R的相对位置不发生变化,变化的是M的位置。题目指出二叉树的先序序列和后序序列结果正好相反:当二叉树只有一个节点时,只有M,L和R为空,满足条件当二叉树为空时,M、L和R均为空,满足条件当二叉树任一节点无左孩子时,L为空,前序遍历为M-R,后序遍历为R-M,结果正好相反,满足条件当二叉树任一节点无右孩子时,R为空,前序遍
2020-06-14 14:06:51
9140
1
原创 Python二叉树的实现
树与二叉树在了解二叉树之前,我们要先了解树的一些概念,方便我们对二叉树的理解。什么是树?树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不
2020-06-13 14:36:48
1741
原创 Python链表小练习---删除链表的倒数第K个节点和旋转链表
1、删除链表的倒数第K个节点题目描述:给定一个链表: 1->2->3->4->5, 和 k = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.解题思路:使用两个指针p,q,刚开始两个指针指向链表的头部让q指针向后移动k个节点,p和q节点之间的举例保持为kp和q同时向后移动,直到q.next = None,此时p节点为删除节点的前一个节点删除倒数第k个节点,p.next = p.next.next实现代码如下:from Sing
2020-06-12 13:05:54
602
原创 Python实现双向链表的封装
什么是双向链表和单向链表不同的是,双向链表每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。双向链表的操作和代码实现前面先实现节点的封装和链表的封装以及链表是否为空、链表长度、遍历链表的代码:class Node(object): """链表节点的实现""" def __init__(self, element): """创建一个节点""" self.elemen
2020-06-12 00:12:46
319
原创 Python实现单向循环链表的封装
单向循环链表单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。单向循环链表的操作和代码实现单向循环链表的操作和单向链表的一样,只不过末尾节点的next指向了head,进行有些操作时的判断条件发生了改变。还是和之前一样,我们先进行节点的声明和链表长度,是否为空的代码实现:class Node(object): """节点封装""" def __init__(self, element): self.element
2020-06-12 00:00:05
302
原创 Python实现单向链表的封装
首先我们先了解顺序表和链表的概念,为什么要使用链表。顺序表和链表顺序表顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时需要进行数据搬迁,所以使用起来不是很灵活。链表链表(Linked List) 是一种常见的基础数据结构,是一只种类线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。顺序表和链表的内存分布单向链表单向链表也叫单链表,每个节点包含两个
2020-06-11 23:46:51
323
原创 python—enumerate()、map()、zip()函数的功能和应用
1、enumerate() 函数enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。语法:enumerate(sequence, [start=0])参数:sequence – 一个序列、迭代器或其他支持迭代对象。start – 下标起始位置。返回值:返回 enumerate(枚举) 对象。>>>seq = ['one', 'two', 'three']>>
2020-05-31 20:42:17
866
原创 Python---Django项目实战:CMDB资产扫描和DevOPS自动化运维
文章目录项目实战:CMCD自动化资产扫描和自动化运维1、项目介绍2、项目技术分析运维自动化难点和痛点项目技术难点整体工程设计3、项目环境搭建项目环境要求项目环境的搭建项目目录的配置项目实战:CMCD自动化资产扫描和自动化运维1、项目介绍本项目基于Linux系统搭建系统集群,使用Ansible实现Linux集群下的批量部署和自动化管理,实现Web形式的自动化运维系统,集中批量控制服务器,最终实现能支撑1000台实例的环境提供管理和自动化任务,提高运维工程师的工作效率和质量。项目基于HTTP实现自动化任务
2020-05-20 18:59:39
3765
2
原创 Python---Docker容器基础入门
文章目录Docker1 Docker简介1.1 什么是虚拟化1.2 什么是Docker1.3 容器和虚拟化的比较1.4 Docker组件1.4.1 Docker服务器与客户端1.4.2 Docker镜像与容器1.4.3 Registry(注册中心)2 Docker的安装与启动2.1 安装Docker2.1.1 修改redhat源为centos7的yum源2.1.2 安装Docker-ce2.2 Docker的启动与停止3 常用命令3.1 镜像相关命令3.1.1 查看镜像3.1.2 搜索镜像3.1.3 拉取镜
2020-05-15 22:56:15
407
原创 python---数据清洗
干净整洁的数据是后续进行研究和分析的基础。数据科学家们会花费大量的时间来清理数据集,毫不夸张地说,数据清洗会占据他们80%的工作时间,而真正用来分析数据的时间只占到20%左右。所以,数据清洗到底是在清洗些什么?通常来说,你所获取到的原始数据不能直接用来分析,因为它们会有各种各样的问题,如包含无效信息,列名不规范、格式不一致,存在重复值,缺失值,异常值等…1、了解数据拿到一个全新的数据集,我们需要先了解数据,看看它长什么样子。常用的方法和属性如下:方法属性.head()查看前
2020-05-08 23:21:11
768
原创 python---绘图库matplotlib
Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。安装(Linux系统) pip install matplotlib导入import matplotlib.pyplot as plt在绘图结构中,figure创建窗口,subplot创建子图。所有的绘画只能在子图上进行。plt表示当前子图,若没有就创建一个子图。所有你会看到一些教程中使用plt进
2020-05-08 21:25:39
1457
原创 Python---Pandas基础入门
1、Pandas创建Series(只有行索引)数据类型Pandas官方文档网址:https://pandas.pydata.org/安装Pandaspip install -i https://pypi.douban.com/simple pandas导入Pandas库,一般都会用到numpy库,所以我们一同导入:import numpy as npimport pandas as pd创建Series 数据类型有三种方法:通过列表创建Series对象通过numpy的对象N
2020-05-08 20:28:24
432
原创 Python---Numpy基础入门
什么是NumPy?NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:一个强大的N维数组对象 ndarray广播功能函数整合 C/C++/Fortran 代码的工具线性代数、傅里叶变换、随机数生成等功能注意: ...
2020-05-08 15:48:05
297
原创 Scrapy可视化管理工具—spiderkeeper应用
ScrapydScrapyd是一个用于部署scrapy项目和通过HTTP API控制爬虫的服务软件。官方文档:http://scrapyd.readthedocs.org/Github项目地址: https://github.com/scrapy/scrapydScrapy使用教程安装pip install scrapyd运行scrapyd命令,访问127.0.0.1:6800可...
2020-05-04 22:24:17
1081
原创 有道词典的爬虫--POST方法提交数据的练习
目的:实现有道翻译的爬虫,输入需要翻译的内容,返回翻译的结果访问的网址:http://fanyi.youdao.com/难点:salt(盐)的生成,在js源代码中查看sign(签名)的生成,其加密方式的分析访问的url不是有道翻译的网址,而是头部里的Request URL, 且访问的时候需要删除’_o’POST方式爬虫分析:需要解析Ajax的API接口,查看请求头部Reque...
2020-05-04 14:48:12
671
原创 网络爬虫--Selenium的使用
为什么要使用Selenium?JS动态渲染的页面不止Ajax这一种, 有些网站,不能直接分析Ajax来抓取, 难以直接找出其规律。如何解决上述问题呢?直接使用模拟浏览器运行的方式来实现,可见即可爬。Python提供了许多模拟浏览器运行的库,如Selenium、Splash、PyV8、Ghost等。Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等...
2020-05-04 13:40:27
675
原创 网络爬虫--Ajax爬虫
什么是Ajax?为什么要用Ajax?问:浏览器中可看到正常显示的数据,但使用requests得到的结果并没有。 这是什么原因呢?答:requests获取的是原始的HTML文档,而浏览器中的页面是经过JS处理数据后生成的结果。问:这些数据的来源有哪些情况呢?答:Ajax加载、包含在HTML文档中、经过JavaScript和特定算法计算后生成。什么是Ajax?Ajax(Asynchr...
2020-05-03 23:11:08
843
原创 网络爬虫--Scrapy爬虫框架
文章目录Scrapy爬虫框架Scrapy架构流程简单介绍优势Scrapy架构流程Scrapy爬虫步骤1、新建Scrapy项目2、明确目标(items.py)3、制作爬虫4、存储数据Scrapy爬虫框架Scrapy架构流程简单介绍Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy吸引人的地方在于它是一个...
2020-05-02 23:07:21
769
1
原创 爬虫之网络数据解析的三种方式---正则表达式、XPath数据解析库、BeautifulSoup数据解析库
正则表达式爬虫的四个主要步骤:明确目标(要知道你准备取哪个范围或者网站上取搜索)爬(将所有网站的内容全部爬下来)取(取掉对我们没用的数据)处理数据(按照我们想要的方式存储和使用)什么是正则表达式?正则表达式(regular expression),又称为规则表达式,描述了一种字符串匹配的模式(pattern),通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式是由普...
2020-05-02 20:49:34
2501
原创 完美解决Python下matplotlib绘图中文乱码问题(亲测有效)
1、查看matplotlib配置文件的位置import matplotlibprint(matplotlib.matplotlib_fname())/home/kiosk/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc2、将字体放在指定目录SimHei.ttf字体下载链接:字体下载链接...
2020-05-01 21:37:48
462
原创 网络数据采集---urllib库和requests库
网络数据采集之urllib库一、urlliburllib简介urllib是python中一个功能强大用于操作URL,并在爬虫时经常用到的一个基础库,无需额外安装,默认已经安装到python中。官方文档地址:请点击这里urllib的四个子模块Python中urllib库包括以下四个子模块,urllib库是python的内置HTTP请求库,urllib库是一个运用于URL的包(urllib...
2020-04-22 22:33:23
756
原创 爬虫基础入门
01、通用爬虫和聚焦爬虫根据使用场景,网络爬虫可以分为通用爬虫和聚焦爬虫两种。通用爬虫通用网络爬虫是捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。通用搜索引擎(Search Engine)工作原理通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决...
2020-04-22 12:06:16
425
原创 读取一个文件,去除空行,显示除了以井号(#)开头的行以外的所有行
思路:文件中存在空行应先去除空行取掉每一行的开头空格判断每一行是否以#号开头split( ) 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串split( ) 方法语法:str.split(str="", num=string.count(str)).str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。...
2020-04-21 22:24:33
3131
原创 文件批量重命名---修改文件名和格式(代码简短)
文件批量重命名要求:在当前目录新建目录img, 里面包含100个文件, 100个文件名各不相同(X4G5.png)将当前img目录所有以.png结尾的后缀名改为.jpg.import osfor file in os.listdir('./vCode'): # print(file) old_name = './vCode/' + file img_name = ...
2020-04-21 21:17:46
2224
1
原创 Json序列化和反序列化模块dumps、dump、loads、load功能介绍
Json的序列化和反序列化:序列化: 将Python对象转换为Json字符串 - - - > dumps和dump反序列化: 将Json字符串转换为Python对象 - - - > loads和load序列化和反序列功能介绍:序列化:将Python对象转换为Json对象dumps----- 将Python对象转换为Json字符串dumps(obj, skipkeys=F...
2020-04-21 18:55:52
370
转载 Python中%s、%d、%f意义及用法详解
%s 格式化字符串print('str1%s' % 'str2')>> str1str2# 意思是%作为一个替代,将后面的‘str2’字符串加到str1后面具体用法:string="hello" #%s打印时结果是hello print "string=%s" % string # output: string=hello #%2s意思...
2020-04-09 17:25:29
1967
原创 元组和命名元组
一、元组1、元组的定义在Python中,元组由内置的tuple类型定义。创建元组,需要将所有的元组放在圆括号( )内,以逗号分隔。构造只有一个元素的元组时,括号内只包含一个元素是不够的,需要在其后面加上一个逗号t=(1) # 改变优先级 int/str/float ; t=(1,) # 元组类型;元组中的元素可以有任意多个,并且可以是不同类型的(例如:数字、字符串、列表等...
2020-04-06 16:15:58
1181
原创 浅谈Django--makemigrations和migrate的差别
Django的makemigrations和migrate的差别如下:当你修改了model.py的内容之后,执行命令1:python manager.py makemigrations相当于在该app下建立了migrations目录,并记录下你所有的关于model.py的改动,比如0001_initial.py, 但是这个改动还没有作用到数据库文件在此之后我们再执行命令2:pyth...
2020-04-03 19:34:52
248
原创 Django请求的生命周期和图解
1、Django请求生命周期的概念:从用户通过浏览器输入url之后到看到网页的整个过程。2、Django的生命周期: 1. 用户在浏览器输入网址,浏览器向django服务器发起请求 2. WSGI(服务网关接口)创建socket服务端,接受请求 3. 中间件处理请求(全局生效:所有方法均需要先由中间件处理) 4. 路由系统(url.py) 1.根据当前请求的url找到相应的视图函...
2020-04-03 18:58:54
444
原创 简述http与https基本概念和两者区别
1、什么是http?超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。HTTP(超文本传输协议)被用于在Web浏览器和网站服务器之间,以明文方式传递信息,不提供任何方式的数据加密,因此使用HTTP协议传输隐私信息(如:...
2020-04-03 11:45:02
495
原创 HTTP无状态协议以及其解决方案
一、无状态的理解1、协议对事物处理没有记忆能力2、对同一个url请求没有上下文关系3、每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求无直接关系,它不会受前面的请求应答情况影响,也不会影响之后的请求应答情况4、服务器中没有保存客户端的状态,客户端每次需带上自己的状态去请求服务器二、通俗理解标准的http协议指的是不包括cookies,session,applicatio...
2020-04-01 11:54:24
2358
原创 HTTP请求方式中的8种请求方式
介绍:HTTP是超文本传输协议,其定义了客户端和服务器端之间文本传输的规范。HTTP默认使用80端口,这个端口指的是服务器端的端口,而客户端的端口是动态分配的。当我们没有指定端口访问时,浏览器会默认帮我们添加80端口。我们也可以自己指定访问端口。需要注意的是,现在大多数访问使用HTTPS协议,而HTTPS的默认端口为443,如果使用80端口访问,HTTPS协议的服务器可能会被拒绝。HTTP请求...
2020-03-31 20:29:54
10384
原创 Leetcode简单编程每日一练(持续更新)
1、整数反转要求: 123 —>321;-123—>-321;90—>9,如果不在-2147483648~2147483647之间则返回0。方法一:解题思路:1、如果数字在[-9,9]之间,返回原数字2、不在[-9,9]之间,判断是正数还是负数, 1) 正数的话,将整数通过str()转换为字符串,通过列表的反转[::-1]进行反转,最后将字符串转为整形输出 2)...
2020-03-31 13:22:52
473
原创 python纠错本---高级编程(持续更新)
1、python socket操作叙述sk.recv(bufsize[,flag]):接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略sk.recvfrom(bufsize[.flag]):与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地...
2020-03-29 12:32:05
200
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人