python爬蟲(二)--瞭解deque

隊列-deque
有了上面一節的基礎,固然你須要徹底掌握上一節的全部方法,由於上一節的方法,在下面的教程中
會反覆的用到。
若是你沒有記住,請你返回上一節。
這一節咱們要了解一種隊列--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
shell

相關文章
相關標籤/搜索