自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 python二分法查找

二分法查找二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后...

2018-08-29 10:02:04 425

原创 树与树算法

树的概念树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点; 没有父节点的节点称为根节点; 每一个非根节点有且只有一个父节点; 除了...

2018-08-29 10:01:04 230

转载 python双端队列及其实现

双端队列双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。 操作Deque() 创建一个空的双端队列 add_front(item) 从队头加入一个item元素 add_rear(item) 从队尾加入一个item元素...

2018-08-28 13:12:18 792

原创 python队列及其实现

队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出的(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是在队列最后。这也比较符合我...

2018-08-28 13:11:07 2260

原创 python中的栈及其实现

栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In ...

2018-08-28 10:17:09 7921

原创 python单向循环链表

单向循环链表单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。 操作is_empty() 判断链表是否为空 length() 返回链表的长度 travel() 遍历 add(item) 在头部添加一个节点 append(item) 在尾部添加一个节点 insert(pos, item) 在指定位置pos添加节点 re...

2018-08-28 10:08:09 441

原创 python双向链表

双向链表一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。  操作is_empty() 链表是否为空 length() 链表长度 travel() 遍历链表 add(item) 链表头部添加 append(item) 链表尾部添加 inse...

2018-08-28 10:03:51 816

原创 python单向链表

单向链表单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。表元素域elem用来存放具体的数据。 链接域next用来存放下一个节点的位置(python中的标识) 变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点。 节点实现class ...

2018-08-28 10:01:35 177

原创 Python中的顺序表

Python中的顺序表Python中的list和tuple两种类型采用了顺序表的实现技术,具有顺序表的所有性质。tuple是不可变类型,即不变的顺序表,因此不支持改变其内部状态的任何操作,而其他方面,则与list的性质类似。list的基本实现技术Python标准类型list就是一种元素个数可变的线性表,可以加入和删除元素,并在各种操作中维持已有元素的顺序(即保序),而且还具有以下行...

2018-08-28 09:57:47 656

原创 数据结构

数据结构我们如何保存一个班的学生信息? 如果想要快速的通过学生姓名获取其信息呢?实际上当我们在思考这个问题的时候,我们已经用到了数据结构。列表和字典都可以存储一个班的学生信息,但是想要在列表中获取一名同学的信息时,就要遍历这个列表,其时间复杂度为O(n),而使用字典存储时,可将学生姓名作为字典的键,学生信息作为值,进而查询时不需要遍历便可快速获取到学生信息,其时间复杂度为O(1)。我们...

2018-08-28 09:52:43 145

原创 常见时间复杂度及对应关系

常见时间复杂度执行次数函数举例 阶 非正式术语 12 O(1) 常数阶 2n+3 O(n) 线性阶 3n2+2n+1 O(n2) 平方阶 5log2n+20 O(logn) 对数阶 2n+3nlog2n+19 O(nlogn) nlogn阶 6n3+2n2+3n+4 O(n3) 立方阶...

2018-08-28 09:48:45 4313

原创 时间复杂度与空间复杂度

时间复杂度与“大O记法”我们假定计算机执行算法每一个基本操作的时间是固定的一个时间单位,那么有多少个基本操作就代表会花费多少时间单位。显然对于不同的机器环境而言,确切的单位时间是不同的,但是对于算法进行多少个基本操作(即花费多少时间单位)在规模数量级上却是相同的,由此可以忽略机器环境的影响而客观的反应算法的时间效率。对于算法的时间效率,我们可以用“大O记法”来表示。“大O记法”:对于单...

2018-08-28 09:37:03 212

原创 HTML class和id

在HTML中,当在一个文档里面我们要对多个标签使用同一个样式的时候可以使用class或者id,当然一般不推荐为了使用样式而为标签添加id;使用javaScript可以获取class和id属性,从而对标签添加特定的行为。 元素唯一的ID:       在元素的开始标签中输入id名,格式 id="name",name是id的名称,程序员自己起,这个id是唯一识别元素的名称,name不能有数...

2018-08-07 13:14:38 1165

原创 Python中_,__,__xx__的区别

_xx 单下划线开头Python中没有真正的私有属性或方法,可以在你想声明为私有的方法和属性前加上单下划线,以提示该属性和方法不应在外部调用.如果真的调用了也不会出错,但不符合规范.#! /usr/bin/pythondef singleton(cls): _instance = {} # 不建议外部调用 def _singleton(*args...

2018-08-05 20:05:28 148

原创 Python sorted() 函数

描述sorted() 函数对所有可迭代的对象进行排序操作。sort 与 sorted 区别:sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。语法sorted 语法:sort...

2018-08-04 19:01:18 171

原创 Python getattr() 函数

描述getattr() 函数用于返回一个对象属性值。语法getattr 语法:getattr(object, name[, default])参数object -- 对象。 name -- 字符串,对象属性。 default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。返回值返回对象属性值。实例以下实例展示...

2018-08-04 17:22:59 1065

原创 selenium 处理cookie及switch的使用

1 selenium 处理cookie通过driver.get_cookies()能够获取所有的cookie# 把cookie转化为字典{cookie[‘name’]: cookie[‘value’] for cookie in driver.get_cookies()}#删除一条cookiedriver.delete_cookie("CookieName")# 删除所有的co...

2018-07-27 19:42:59 675

原创 selenium的基本使用

1 加载网页:selenium通过控制浏览器,所以对应的获取的数据都是elements中的内容```pythonfrom selenium import webdriver driver = webdriver.PhantomJS()driver.get("http://www.baidu.com/")driver.save_screenshot("长城.png")```...

2018-07-27 19:39:34 318

原创 无头浏览器

 想在python爬虫操作动态的数据,就必须学习selenium自动化测试工具, 而使用selenium的前提是需要无头浏览器(无界面浏览器)1 什么是seleniumSelenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器),可以接收指令,让浏览器自动加...

2018-07-27 19:36:55 1902

原创 python生成器

1. 生成器利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成。但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一个数据。为了达到记录当前状态,并配合next()函数进行迭代使用,我们可以采用更简便的语法,即生成器(generator)。生成器是一类特殊的迭代器。2. 创建生成器方法1要创建一个生成器,有很...

2018-07-23 12:30:33 322

原创 迭代器

迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。1. 可迭代对象我们已经知道可以对list、tuple、str等类型的数据使用for...in...的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代。但是,是否所有的数据类型都可以放到for...in....

2018-07-23 12:27:17 687

原创 进程池Pool

当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法。初始化Pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到指定的...

2018-07-23 12:23:03 189

原创 进程中的Queue

进程间通信-QueueProcess之间有时需要通信,操作系统提供了很多机制来实现进程间的通信。1. Queue的使用可以使用multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个消息列队程序,首先用一个小实例来演示一下Queue的工作原理:#coding=utf-8from multiprocessing import Queueq=...

2018-07-23 12:20:09 200

原创 进程、线程、协程对比

进程、线程对比功能进程,能够完成多任务,比如 在一台电脑上能够同时运行多个QQ 线程,能够完成多任务,比如 一个QQ中的多个聊天窗口定义的不同 进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器...

2018-07-23 11:56:41 196

原创 python进程的状态及创建

进程以及状态1. 进程程序:例如xxx.py这是程序,是一个静态的进程:一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元。不仅可以通过线程完成多任务,进程也是可以的2. 进程的状态工作中,任务数往往大于cpu的核数,即一定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态就绪态:运行的条件都已经慢去,正在等在...

2018-07-23 11:52:23 4484

原创 python线程的互斥锁

当多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制 线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁。互斥锁为资源引入一个状态:锁定/非锁定 某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变成“非锁定”,其他的线程才能再次锁定该资源。互斥锁保证了每次只有一个线程进行写入操作,从而...

2018-07-23 11:40:03 257

原创 python线程

 python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用 1. 使用threading模块单线程执行#coding=utf-8import timedef saySorry(): print("亲爱的,我错了,我能吃饭了吗?") time.sleep(1)if __na...

2018-07-23 11:34:45 168

原创 python进程池apply与apply_async的区别

apply方法是阻塞的。 意思就是等待当前子进程执行完毕后,在执行下一个进程。 例如:     执行结果如下:     因为apply是阻塞的,所以进入子进程执行后,等待当前子进程执行完毕,在继续执行下一个进程。 例如: 有三个进程0,1,2。等待子进程0执行完毕后,在执行子进程1,然后子进程2,最后回到主进程执行主进程剩余部分,就像上面的执行结果一样。...

2018-07-17 16:48:56 32454 4

原创 MongoDB的使用

mongod:mongo 是启动MongoDB shell客户端的命令mongod 是启动MongoDB数据库服务的命令,主要提供了四种启动方式:1. 命令行方式直接启动MongoDB默认的存储数据目录为/data/db(需要事先创建),默认端口27017,也可以修改成不同目录:# 直接启动mongod,默认数据存储目在 /data/dbpython@ubuntu:~$...

2018-07-15 14:43:46 295

原创 Ubuntu中MongoDB的安装

 安装 下载mongodb的版本,两点注意 根据业界规则,偶数为稳定版,如3.2.X;奇数为开发版,如3.3.X 32bit的mongodb最大只能存放2G的数据,64bit就没有限制 MongoDB官网安装包下载地址:http://www.mongodb.org/downloads MongoDB安装文档:https://docs.mongodb.com/g...

2018-07-15 13:08:42 1282

原创 Linux编辑只读文件

方法一:sudo gedit fileURL 然后随意操作随意保存。 方法二:VIM编辑完成之后 命令:w !sudo tee % 输入密码//二,警告文件已被修改了,并显示出一个选项菜单。//这里按 L键重新将该文件载入缓冲区。//按 O 应该也可以,笔者没有尝试。Press ENTER or type command to continue W12:...

2018-07-14 16:52:19 6626

原创 python的json中方法以及jsonpath模块

什么是jsonJSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。json模块中方法的学习其中类文件对象的理解:具有read()或者write()方法的对象就是类文件对象,比如f = open(“a.txt”,”r”) f就是类文件...

2018-07-12 22:19:03 9242

原创 什么是XML

什么是XMLXML 指可扩展标记语言(EXtensible Markup Language)XML 是一种标记语言,很类似 HTMLXML 的设计宗旨是传输数据,而非显示数据XML 的标签需要我们自行定义。XML 被设计为具有自我描述性。XML 是 W3C 的推荐标准W3School官方文档:http://www.w3school.com.cn/xml/index.aspXML 和 HTML 的区...

2018-07-11 21:59:12 442

原创 python正则表达式中原生字符r的作用

r的作用>>> mm = "c:\\a\\b\\c">>> mm'c:\\a\\b\\c'>>> print(mm)c:\a\b\c>>> re.match("c:\\\\",mm).group()'c:\\'>>> ret = re.match(

2018-07-10 19:42:12 20722 2

原创 Python正则表达式中的贪婪和非贪婪

python贪婪和非贪婪Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪则相反,总是尝试匹配尽可能少的字符。在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。>>> s="This is a number 234-235-22-423">>> r=re

2018-07-10 19:36:18 718

原创 Python中re模块的常见方法

re模块的常见方法1.pattern.match(从头找一个)    ret = re.match("[1-9]?\d$","08")2.pattern.search(找一个)    ret = re.search(r"\d+", "阅读次数为 9999")3.pattern.findall(找所有)返回一个列表,没有就是空列表re.findall("\d","lei0hou1") &am

2018-07-08 23:50:34 429

原创 requests模块的入门使用

requests的作用作用:发送网络请求,返回响应数据中文文档 : http://docs.python-requests.org/zh_CN/latest/index.htmlrequests模块发送简单的get请求、获取响应需求:通过requests向百度首页发送请求,获取百度首页的数据import requests # cmd输入pip install requests 安装模块...

2018-07-07 13:00:07 199

原创 正则表达式---------常用字符及其功能

匹配单个字符字符功能*匹配前一个字符出现0次或者无限次,即可有可无+匹配前一个字符出现1次或者无限次,即至少有1次?匹配前一个字符出现1次或者0次,即要么有1次,要么没有{m}匹配前一个字符出现m次{m,n}匹配前一个字符出现从m到n次匹配多个字符字符功能*匹配前一个字符出现0次或者无限次,即可有可无+匹配前一个字符出现1次或者无限次,即至少有1次?匹配前一个字符出现1次或者0次,即要么有1次,要...

2018-07-05 22:05:25 144

原创 什么是Scrapy

         Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。         Scrapy 使用了 Twisted异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种...

2018-07-04 21:17:47 1641

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除