Python中collections模塊deque的用法是什么

這篇文章主要介紹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)新互聯

成都做網站