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