隊列-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