1. 程式人生 > >Python 小技巧——讀書筆記(2)deque和heapq

Python 小技巧——讀書筆記(2)deque和heapq

在python中,提供了兩個資料結構給我們——deque和heapq。

collections.deque

deque是佇列,可以通過設定佇列的長度從而實現查詢資料前N條記錄的功能(關於什麼是佇列我這邊就不多說了,不太清楚的讀者可以百度一下,簡單概括就是四個字:先進先出),它存在於collections這個模組中。
具體的設定和呼叫非常簡單:

from collections import deque
q = deque(maxlen = 3) #這裡構造了一個長度為3的佇列
q.append(1)
q.append(2)
q.append(3)
print(q)
q.append
(4) print(q)

大家可以執行一下上面的程式碼,我們可以看到,q裡面始終保持著最新的3個引數,另外,如果不限定maxlen的話,你將會得到一個無限長的佇列來維持你的資料,至於佇列的更深一層用法,我這裡就不細說,詳情可以查閱BFS

heapq

heapq是python中實現小頂堆排序的模組,從小到大的順序進行排序
利用heapq,我們可以輕鬆對數列進行堆排序處理:

import heapq

def heapSort(listVar):
    temp = []
    for item in listVar:
        heapq.heappush(temp,item)
    return
[heapq.heappop(temp) for i in range(len(temp))] l = [11,4,3,1,5,6,8,9,7] print(heapSort(l))

我們可以看到,heapq裡面提供了heappush和heappop函式,heappush,顧名思義就是把元素按堆的方式放入列表當中,heappop則是取最小的元素,如果堆是空,返回一個錯誤

另外,heapq裡面還提供了一個heapify函式用來原地將列表轉換成堆,所以上面的程式碼我們可以簡化成如下:

import heapq

def heapSort(listVar):
    heapq.heapify(listVar)
    return
[heapq.heappop(listVar) for i in range(len(listVar))] l = [11,4,3,1,5,6,8,9,7] print(heapSort(l))

heapq還提供了nlargest和nsmallest兩個函式以提取最大(最小)的N個值,其中可以通過key=function()來實現複雜資料的提取