python入門:關於堆操作的一個模塊heapq及其函數



若有幫助到你,記得點贊u。

# -*- coding: utf-8 -*-
"""
Created on Fri Apr  6 20:25:02 2018

@author: Lelouch_C.C
"""
#python中沒有獨立的對類型,只有一個包含一些堆操作函數的模塊heapq,q指queue隊列
from heapq import *
from random import shuffle
data=list(range(10))
shuffle(data)             #shuffle英文意思是洗牌,這裏進行隨機打亂data中元素順序
heap=[]
for n in data:
    heappush(heap,n)      #將n入堆
print(heap)
#輸出:[0, 1, 2, 4, 6, 9, 3, 7, 5, 8],輸出結果可能不同
heappush(heap,0.5)
print(heap)
#輸出:[0, 0.5, 2, 4, 1, 9, 3, 7, 5, 8, 6],輸出結果可能不同

"""
上述排序並不嚴格,但也並不隨意.
遵循堆屬性:i位置處的元素總比2i和2i+1位置處的元素小.
注意:i從1開始.
"""

heappop(heap)             
#heappop會彈出最小元素,一般來說都是在索引0處,
#並且在保證堆屬性的條件下,會將剩餘的元素中最小的那個佔據索引0的位置
print(heap)
#輸出:[0.5, 1, 6, 2, 5, 8, 7, 4, 3, 9],輸出結果可能不同
heappop(heap)
print(heap)
#輸出:[1, 3, 2, 4, 5, 9, 6, 8, 7],輸出結果可能不同

heap1=[5,8,4,6,1,7,9,3,2]
heapify(heap)               
#heapify將任意的列表作爲參數,並通過儘可能少的操作使得列表滿足堆屬性。
#注意:對於任意的列表,不能直接用heappush、heappop、heapreplace等,必須先用heapify進行合法化
print(heap)
#輸出:[1, 2, 5, 3, 4, 7, 8, 6, 9]

heapreplace(heap,0.5)
#heapreplace會彈出最小元素,並將新元素推入,返回被推出的最小值
print(heap)
#輸出:[0.5, 2, 6, 4, 3, 7, 8, 9, 5]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章