Python內建資料結構之雙向佇列

千鋒教育qyf發表於2021-05-11

  經常聽說Python就是一門執行速度低的語言,可能是你的程式中使用了複雜的演算法與資料結構,才會導致程式執行速率低的。在Python的標準庫中提供了常見的資料結構工開發者使用,不僅執行速率比較快,還可以簡化開發者的程式設計工作。下面我來介紹其中的雙向佇列:

  collections模組中的deque類,就是雙向佇列,這種佇列可以從頭部或者尾部新增或者移除元素,這種操作的所消耗的時間時常數級別的,所以它非常合適表示先進先出的佇列。

  # 演示先進先出的佇列操作

  from collections import deque

  queue = deque()

  # 新增資料

  queue.append(20)

  queue.append(30)

  queue.append(40)

  print(queue) # deque([20, 30, 40])

  # 移除資料

  queue.popleft()

  print(queue) # deque([30, 40])

  這種情況下,也許有人會說列表也可以做這種操作的,那麼區別是什麼?區別是列表是單向的,在尾部新增或者移除資料的操作耗時是常數級別的,但是如果在頭部新增或者移除資料卻是線性級別(耗時與資料大小成正比)的,那麼對比雙向佇列來說,就慢許多了,可以看下面程式碼

  from time import time

  # 演示先進先出的佇列操作

  from collections import deque

  # 在雙向佇列中新增資料

  queue = deque()

  for i in range(20000):

  queue.append(i)

  print(queue)

  start = time()

  queue.popleft()

  end = time()

  print(end - start) # 3.0994415283203125e-06 不同機器耗時不一樣 可以在自己的電腦上測試

  # 在列表中新增相同的資料 做一樣的操作

  nums = list()

  for i in range(20000):

  nums.append(i)

  print(nums)

  start = time()

  nums.pop(0)

  end = time()

  print(end - start) # 1.5020370483398438e-05 不同機器耗時不一樣 可以在自己的電腦上測試

  從上面兩組資料來看,列表list做先進先出操作耗時比雙向佇列deque完成相應的操作多很多的。所以要完成先進先出的佇列操作時應該選擇雙向佇列deque.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996644/viewspace-2771826/,如需轉載,請註明出處,否則將追究法律責任。

相關文章