队列-deque

有了上面一节的基础。当然你须要全然掌握上一节的全部方法,由于上一节的方法。在以下的教程中

会重复的用到。

假设你没有记住,请你返回上一节。

http://blog.csdn.net/passer_zzy/article/details/47156109

这一节我们要了解一种队列--deque。

在以下的爬虫基础中,我们也要重复的使用deque,来完毕网址

的出队入队。



有了对deque主要的认识,我们開始进一步的学习了解他。



colloections.deque([iterable[,maxlen]])

从左到右初始化一个新的deque对象,假设iterable没有给出,那么产生一个空的deque.

deque是栈(stacks)和队列(queues)的泛指。deque支持线程安全。从两边进行存入或者取出是高效率的



虽然list对象支持同样的操作,可是list用来完毕队列功能事实上是低效率的,由于list在队首使用

pop()和insert()都是效率比較低的。



假设maxlen未定义。那么deque但是是随意长度,否则deque仅仅能是指定长度的



deque对象有哪些方法?



1.1:append(x)

向deque的最右边加入元素x

实例:

from collections import deque

a=deque()

for i in range(10):

    a.append(i)

print(a)

输出的结果是:

deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])



1.2:appendleft(x)

向deque的最左边加入元素x

实例:

from collections import deque

a=deque()

for i in range(10):

    a.appendleft(i)

print(a)

输出的结果是:

deque([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])



1.3:clear()

删除deque的全部元素

from collections import deque

a=deque()

for i in range(10):

    a.appendleft(i)

print(a)

a.clear()

print(a)

输出的结果是:

deque([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

deque([])



1.4:count()

统计deque元素个数

from collections import deque

a = deque()

for x in range(10):

    a.append(x)

a.appendleft(1)

print(a.count(1))

输出的结果是:2



1.5:extend(iterable)/extendleft(iterable)

把iterbale中的元素都加入到deque中,默认从右边開始加入,

from collections import deque



a=deque()

l=[1,2,3,4]



for x in range(10):

    a.append(x)

a.extend(l)

print(a)

输出的结果是:

deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4])

[Finished in 0.2s]



1.6:pop()/popleft()

删除末尾的元素,pop()方法并不能像list对象那样能够使用pop(2)

实例:

from collections import deque

a=deque()

l=[1,2,3,4]

for x in range(10):

    a.append(x)

a.extend(l)

print(a)

a.pop()

print(a)

输出的结果是:

deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4])

deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3])



1.7:remove(value)

删除第一个出现的value,假设没有value报错

实例:

from collections import deque

a=deque()

l=[1,2,3,4]

for x in range(10):

    a.append(x)

a.extend(l)

print(a)

a.remove(3)

print(a)

a.remove(11)

print(a)

输出的结果是:

deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4])

Traceback (most recent call last):

deque([0, 1, 2, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4])

  File "D:\Python\xode\try.py", line 10, in <module>

    a.remove(11)

ValueError: deque.remove(x): x not in deque



1.8:reverse()

全部元素反转,并返回None

实例:

from collections import deque

a=deque()

for x in range(10):

    a.append(x)

print(a)

print(a.reverse())

print(a)

输出的结果是:

deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

None

deque([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])



1.9:rotate(n)

将左右元素向右移动n步。假设n是负数那么向左移动,n=1相当于:

a.appendleft(d.pop())



from collections import deque

a=deque()

for x in range(10):

    a.append(x)

print(a)

a.rotate()

print(a)

输出的结果是:

deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

deque([9, 0, 1, 2, 3, 4, 5, 6, 7, 8])



最后再看一些官方文档给出的样例:

>>> from collections import deque

>>> d = deque('ghi')                 # make a new deque with three items

>>> for elem in d:                   # iterate over the deque's elements

...     print(elem.upper())

G

H

I



>>> d.append('j')                    # add a new entry to the right side

>>> d.appendleft('f')                # add a new entry to the left side

>>> d                                # show the representation of the deque

deque(['f', 'g', 'h', 'i', 'j'])



>>> d.pop()                          # return and remove the rightmost item

'j'

>>> d.popleft()                      # return and remove the leftmost item

'f'

>>> list(d)                          # list the contents of the deque

['g', 'h', 'i']

>>> d[0]                             # peek at leftmost item

'g'

>>> d[-1]                            # peek at rightmost item

'i'



>>> list(reversed(d))                # list the contents of a deque in reverse

['i', 'h', 'g']

>>> 'h' in d                         # search the deque

True

>>> d.extend('jkl')                  # add multiple elements at once

>>> d

deque(['g', 'h', 'i', 'j', 'k', 'l'])

>>> d.rotate(1)                      # right rotation

>>> d

deque(['l', 'g', 'h', 'i', 'j', 'k'])

>>> d.rotate(-1)                     # left rotation

>>> d

deque(['g', 'h', 'i', 'j', 'k', 'l'])



>>> deque(reversed(d))               # make a new deque in reverse order

deque(['l', 'k', 'j', 'i', 'h', 'g'])

>>> d.clear()                        # empty the deque

>>> d.pop()                          # cannot pop from an empty deque

Traceback (most recent call last):

    File "<pyshell#6>", line 1, in -toplevel-

        d.pop()

IndexError: pop from an empty deque



>>> d.extendleft('abc')              # extendleft() reverses the input order

>>> d

deque(['c', 'b', 'a'])





钟志远   江苏南京  904727147

python爬虫(二)--了解deque的更多相关文章

  1. Python爬虫二

    常见的反爬手段和解决思路 1)明确反反爬的主要思路 反反爬的主要思路就是尽可能的去模拟浏览器,浏览器在如何操作,代码中就如何去实现;浏览器先请求了地址url1,保留了cookie在本地,之后请求地址u ...

  2. Python 爬虫二 requests模块

    requests模块 Requests模块 get方法请求 整体演示一下: import requests response = requests.get("https://www.baid ...

  3. Python爬虫(二十一)_Selenium与PhantomJS

    本章将介绍使用Selenium和PhantomJS两种工具用来加载动态数据,更多内容请参考:Python学习指南 Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试 ...

  4. python爬虫(二)_HTTP的请求和响应

    HTTP和HTTPS HTTP(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收HTML页面的方法 HTTPS(HyperText Transfer Prot ...

  5. Python爬虫(二十四)_selenium案例:执行javascript脚本

    本章叫介绍如何使用selenium在浏览器中使用js脚本,更多内容请参考:Python学习指南 隐藏百度图片 #-*- coding:utf-8 -*- #本篇将模拟执行javascript语句 fr ...

  6. Python爬虫(二十三)_selenium案例:动态模拟页面点击

    本篇主要介绍使用selenium模拟点击下一页,更多内容请参考:Python学习指南 #-*- coding:utf-8 -*- import unittest from selenium impor ...

  7. Python爬虫(二十二)_selenium案例:模拟登陆豆瓣

    本篇博客主要用于介绍如何使用selenium+phantomJS模拟登陆豆瓣,没有考虑验证码的问题,更多内容,请参考:Python学习指南 #-*- coding:utf-8 -*- from sel ...

  8. Python爬虫(二十)_动态爬取影评信息

    本案例介绍从JavaScript中采集加载的数据.更多内容请参考:Python学习指南 #-*- coding:utf-8 -*- import requests import re import t ...

  9. Python 爬虫(二十五) Cookie的处理--cookielib库的使用

    Python中cookielib库(python3中为http.cookiejar)为存储和管理cookie提供客户端支持. 该模块主要功能是提供可存储cookie的对象.使用此模块捕获cookie并 ...

随机推荐

  1. IOS学习笔记2—Objective C—类、属性、方法

    以下是我学习IOS开发的一些笔记和心得,贴出来和大家一同分享,也希望大家能补充和纠错,共同进步 有Android和IOS开发问题也希望能和大家交流! Objective-C 1.OC是一门基于C的面向 ...

  2. 用Jenkins构建项目实战

    登录Jenkins,新建任务 输入一个任务名称,选择一个项目类型 使用自定义工作空间:使该项目独立于系统的工作空间 自动从Git下载源码,点击添加可以增加凭证 日程表的参数: 第一个参数代表的是分钟 ...

  3. 条款26:尽可能延后变量定义式的出现时间(Postpone variable definitions as long as possible)

    NOTE : 1.尽可能延后变量定义式的出现时间.这样做可增加程序的清晰度并改善程序效率.

  4. python全套视频十五期(116G)

    python全套视频,第十五期,从入门到精通,基础班,就业班,面试,软件包 所属网站分类: 资源下载 > python视频教程 作者:精灵 链接:http://www.pythonheidong ...

  5. c++值传递和引用及指针传递区别

    以下程序各有何问题? ***************************************************************************************** ...

  6. JavaScript高级程序设计中第2、3章中细节知识点

    第2章 1.<script src='script.js' type='text/javascript'></script>中,只要不包含defer和async属性,浏览器都会 ...

  7. cf839c Journey

    大水题 #include <iostream> #include <cstdio> using namespace std; int n, du[100005], hea[10 ...

  8. 使用PL/SQL将sql脚本数据导入数据库

    一. PL/SQL登录到数据库,使用tools工具进行导入.使用plsql登录到需要导入数据的数据库.点击工具栏上[tools]--[Import tables] 二.commit;

  9. loadrunner报错-持续更新

    一.关联使用web_reg_save_param报错 1.以下是网页中需要关联的地方,有2处,通过网页查看源代码可以看: 2.还可以通过Generation Log来查看需要关联的地方: 3. 然后再 ...

  10. hexo干货系列:(总纲)搭建独立博客初衷

    前言 我是一名程序员,以前知识整理都是整理在为知笔记上,博客用的比较少,更别说是使用独立博客,因为不会... 2016年过年在家期间偶然的机会萌发了自己要搭建一个属于自己的独立博客的想法,于是就有了下 ...