這篇文章主要介紹Python中collections模塊deque的用法是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元隆堯做網(wǎng)站,已為上家服務(wù),為隆堯各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
collections.deque介紹
collections 是 python 內(nèi)建的一個(gè)集合模塊,里面封裝了許多集合類,其中隊(duì)列相關(guān)的集合只有一個(gè):deque。
deque 是雙邊隊(duì)列(double-ended queue),具有隊(duì)列和棧的性質(zhì),在 list 的基礎(chǔ)上增加了移動(dòng)、旋轉(zhuǎn)和增刪等。
常用方法
d = collections.deque([])
d.append('a') # 在最右邊添加一個(gè)元素,此時(shí) d=deque('a')
d.appendleft('b') # 在最左邊添加一個(gè)元素,此時(shí) d=deque(['b', 'a'])
d.extend(['c','d']) # 在最右邊添加所有元素,此時(shí) d=deque(['b', 'a', 'c', 'd'])
d.extendleft(['e','f']) # 在最左邊添加所有元素,此時(shí) d=deque(['f', 'e', 'b', 'a', 'c', 'd'])
d.pop() # 將最右邊的元素取出,返回 'd',此時(shí) d=deque(['f', 'e', 'b', 'a', 'c'])
d.popleft() # 將最左邊的元素取出,返回 'f',此時(shí) d=deque(['e', 'b', 'a', 'c'])
d.rotate(-2) # 向左旋轉(zhuǎn)兩個(gè)位置(正數(shù)則向右旋轉(zhuǎn)),此時(shí) d=deque(['a', 'c', 'e', 'b'])
d.count('a') # 隊(duì)列中'a'的個(gè)數(shù),返回 1
d.remove('c') # 從隊(duì)列中將'c'刪除,此時(shí) d=deque(['a', 'e', 'b'])
d.reverse() # 將隊(duì)列倒序,此時(shí) d=deque(['b', 'e', 'a'])應(yīng)用
1、可以使用 deque 的旋轉(zhuǎn)來制作跑馬燈:
import collections
import sys
import time
def marquee(length=50, speed=1, direction=1):
"""
生成一個(gè)簡(jiǎn)單的跑馬燈
length:總長(zhǎng)
speed:每0.1秒的移動(dòng)速度
direction:0為向左,1為向右
"""
if direction == 1:
array = '>'
else:
array = '<'
que = collections.deque([array])
que.extend(['-'] * (length - 1)) # 形如'>------'
while True:
print('%s' % ''.join(que))
if direction == 1:
que.rotate(1 * speed)
else:
que.rotate(-1 * speed)
sys.stdout.flush()
time.sleep(0.1)
if '__main__' == __name__:
marquee()2、可以使用deque的旋轉(zhuǎn)來解決約瑟夫問題:
""" 約瑟夫算法 據(jù)說著名猶太歷史學(xué)家 Josephus 有過以下的故事: 在羅馬人占領(lǐng)橋塔帕特后,39個(gè)猶太人與 Josephus 及他的朋友躲到一個(gè)洞中, 39個(gè)猶太人決定寧愿死也不要被敵人抓到,于是決定了一個(gè)自殺方式,41個(gè)人排成一個(gè)圓圈, 由第1個(gè)人開始報(bào)數(shù),每報(bào)數(shù)到第3人該人就必須自殺,然后再由下一個(gè)重新報(bào)數(shù), 直到所有人都自殺身亡為止。然而 Josephus 和他的朋友并不想自殺, 問他倆安排的哪兩個(gè)位置可以逃過這場(chǎng)死亡游戲? """ import collections def ysf(a, b): d = collections.deque(range(1, a+1)) # 將每個(gè)人依次編號(hào),放入到隊(duì)列中 while d: d.rotate(-b) # 隊(duì)列向左旋轉(zhuǎn)b步 print(d.pop()) # 將最右邊的刪除,即自殺的人 if __name__ == '__main__': ysf(41,3) # 輸出的是自殺的順序。最后兩個(gè)是16和31,說明這兩個(gè)位置可以保證他倆的安全。
3、deque是現(xiàn)成安全的。
import collections
import threading
import time
candle = collections.deque(xrange(10))
print candle
def poper(direction, next_item):
while True:
try:
next = next_item()
except IndexError:
break
else:
print '%s : %s' % (direction, next)
time.sleep(0.1)
print "done %s" % direction
return
left = threading.Thread(target=poper, args=('left', candle.popleft))
right = threading.Thread(target=poper, args=('right', candle.pop))
left.start()
right.start()
left.join()
right.join()結(jié)果:
deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) left : 0 right : 9 right : 8 left : 1 right : 7 left : 2 left : 3 right : 6 left : 4 right : 5 done right done left
以上是Python中collections模塊deque的用法是什么的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
文章題目:Python中collections模塊deque的用法是什么
本文鏈接:http://www.yijiale78.com/article10/jcsjgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、品牌網(wǎng)站制作、企業(yè)建站、ChatGPT、自適應(yīng)網(wǎng)站、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)