婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python heapq庫案例詳解

Python heapq庫案例詳解

熱門標簽:南昌辦理400電話怎么安裝 徐州天音防封電銷卡 鄭州智能外呼系統運營商 不錯的400電話辦理 電話機器人適用業務 哈爾濱外呼系統代理商 湛江電銷防封卡 獲客智能電銷機器人 佛山防封外呼系統收費

Python heapq

heapq 庫是 Python 標準庫之一,提供了構建小頂堆的方法和一些對小頂堆的基本操作方法(如入堆,出堆等),可以用于實現堆排序算法。

堆是一種基本的數據結構,堆的結構是一棵完全二叉樹,并且滿足堆積的性質:每個節點(葉節點除外)的值都大于等于(或都小于等于)它的子節點。

堆結構分為大頂堆和小頂堆,在 heapq 中使用的是小頂堆:

  1. 大頂堆:每個節點(葉節點除外)的值都大于等于其子節點的值,根節點的值是所有節點中最大的。
  2. 小頂堆:每個節點(葉節點除外)的值都小于等于其子節點的值,根節點的值是所有節點中最小的。

在 heapq 庫中,heapq 使用的數據類型是 Python 的基本數據類型 list ,要滿足堆積的性質,則在這個列表中,索引 k 的值要小于等于索引 2k+1 的值和索引 2k+2 的值(在完全二叉樹中,將數據按廣度優先插入,索引為k的節點的子節點索引分別為 2k+1 和 2k+2)。在 heapq 庫的源碼中也有介紹,可以讀一下 heapq 的源碼,代碼不多。

使用Python實現堆排序可以參考:https://www.jb51.net/article/222484.htm

完全二叉樹的特性可以參考:https://www.jb51.net/article/222487.htm

一、使用 heapq 創建堆

import heapq 
 
array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
heap = []
for num in array:
    heapq.heappush(heap, num)
print("array:", array)
print("heap: ", heap)
 
heapq.heapify(array)
print("array:", array)

運行結果:

array: [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
heap:  [5, 7, 21, 15, 10, 24, 27, 45, 17, 30, 36, 50]
array: [5, 7, 21, 10, 17, 24, 27, 45, 15, 30, 36, 50]

heapq 中創建堆的方法有兩種:

heappush(heap, num),先創建一個空堆,然后將數據一個一個地添加到堆中。每添加一個數據后,heap 都滿足小頂堆的特性。

heapify(array),直接將數據列表調整成一個小頂堆(調整的原理參考上面堆排序的文章,heapq庫已經實現了)。

兩種方法實現的結果會有差異,如上面的代碼中,使用 heappush(heap, num) 得到的堆結構如下。

使用heapify(array)得到的堆結構如下。

不過,這兩個結果都滿足小頂堆的特性,不影響堆的使用(堆只會從堆頂開始取數據,取出數據后會重新調整結構)。

二、使用 heapq 實現堆排序

array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
heap = []
for num in array:
    heapq.heappush(heap, num)
print(heap[0])
# print(heapq.heappop(heap))
heap_sort = [heapq.heappop(heap) for _ in range(len(heap))]
print("heap sort result: ", heap_sort)

運行結果:

5
heap sort result:  [5, 7, 10, 15, 17, 21, 24, 27, 30, 36, 45, 50]

先將待排序列表中的數據添加到堆中,構造一個小頂堆,打印第一個數據,可以確認它是最小值。然后依次將堆頂的值取出,添加到一個新的列表中,直到堆中的數據取完,新列表就是排序后的列表。

heappop(heap),將堆頂的數據出堆,并將堆中剩余的數據構造成新的小頂堆。

三、獲取堆中的最小值或最大值

array = [10, 17, 50, 7, 30, 24, 27, 45, 15, 5, 36, 21]
heapq.heapify(array)
print(heapq.nlargest(2, array))
print(heapq.nsmallest(3, array))

運行結果:

[50, 45]
[5, 7, 10]

nlargest(num, heap),從堆中取出 num 個數據,從最大的數據開始取,返回結果是一個列表(即使只取一個數據)。如果 num 大于等于堆中的數據數量,則從大到小取出堆中的所有數據,不會報錯,相當于實現了降序排序。

nsmallest(num, heap),從堆中取出 num 個數據,從最小的數據開始取,返回結果是一個列表。

這兩個方法除了可以用于堆,也可以直接用于列表,功能一樣。

四、使用heapq合并兩個有序列表

array_a = [10, 7, 15, 8]
array_b = [17, 3, 8, 20, 13]
array_merge = heapq.merge(sorted(array_a), sorted(array_b))
print("merge result:", list(array_merge))

運行結果:

merge result: [3, 7, 8, 8, 10, 13, 15, 17, 20]

merge(list1, list2),將兩個有序的列表合并成一個新的有序列表,返回結果是一個迭代器。這個方法可以用于歸并排序。

五、heapq 替換數據的方法

array_c = [10, 7, 15, 8]
heapq.heapify(array_c)
print("before:", array_c)
# 先 push 再 pop
item = heapq.heappushpop(array_c, 5)
print("after: ", array_c)
print(item)
 
array_d = [10, 7, 15, 8]
heapq.heapify(array_d)
print("before:", array_d)
# 先 pop 再 push
item = heapq.heapreplace(array_d, 5)
print("after: ", array_d)
print(item)

運行結果:

before: [7, 8, 15, 10]
after:  [7, 8, 15, 10]
5
before: [7, 8, 15, 10]
after:  [5, 8, 15, 10]
7

heappushpop(heap, num),先將 num 添加到堆中,然后將堆頂的數據出堆。
heapreplace(heap, num),先將堆頂的數據出堆,然后將 num 添加到堆中。

兩個方法都是即入堆又出堆,只是順序不一樣,可以用于替換堆中的數據。具體的區別可以看代碼中的例子。

到此這篇關于Python heapq庫案例詳解的文章就介紹到這了,更多相關Python heapq庫內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python數據庫如何連接SQLite詳解
  • python實現圖像處理之PiL依賴庫的案例應用詳解
  • Python 數據科學 Matplotlib圖庫詳解
  • python中的tkinter庫彈窗messagebox詳解
  • python數據可視化plt庫實例詳解
  • 一篇文章帶你詳細了解python中一些好用的庫

標簽:呂梁 安康 蕪湖 懷化 吉安 蘭州 廣西 紹興

巨人網絡通訊聲明:本文標題《Python heapq庫案例詳解》,本文關鍵詞  Python,heapq,庫,案例,詳解,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python heapq庫案例詳解》相關的同類信息!
  • 本頁收集關于Python heapq庫案例詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲国产另类av| 国产成人综合自拍| 精品国产三级电影在线观看| 中文字幕精品在线不卡| 久久精品国产免费| 岛国一区二区在线观看| 欧美成人精品高清在线播放| 亚洲电影激情视频网站| jiyouzz国产精品久久| 国产精品久久久久四虎| 福利视频网站一区二区三区| 精品成a人在线观看| 老司机免费视频一区二区三区| 欧美高清精品3d| 奇米影视7777精品一区二区| 日韩三级高清在线| 久久99国产精品尤物| 国产日产欧美一区二区视频| 成人黄色国产精品网站大全在线免费观看| 337p亚洲精品色噜噜狠狠| 狠狠色丁香婷婷综合久久片| 亚洲国产成人私人影院tom| 国产.精品.日韩.另类.中文.在线.播放| 26uuu亚洲综合色欧美| 99久久99久久综合| 日韩国产精品久久久| 国产日韩精品一区二区三区| 在线观看不卡视频| 亚洲精品中文字幕在线观看| 日韩免费高清视频| 91麻豆国产自产在线观看| 午夜电影久久久| 日本一区二区三区四区在线视频| 国产精品一区二区果冻传媒| 亚洲一线二线三线久久久| 91精品国产综合久久久久久久 | 国产一区二区三区久久久| 日韩三级高清在线| 美洲天堂一区二卡三卡四卡视频| www.欧美日韩| 成人激情视频网站| 亚洲日本一区二区| 久久久国产精品麻豆| 97se亚洲国产综合自在线不卡| 日本特黄久久久高潮| 亚洲图片激情小说| 欧美日韩综合不卡| 视频在线观看一区| 欧美aaaaa成人免费观看视频| 亚洲欧美精品午睡沙发| 亚洲美女偷拍久久| 亚洲国产日韩a在线播放性色| 亚洲午夜国产一区99re久久| 白白色亚洲国产精品| 国产电影精品久久禁18| 国产成人精品影视| 亚洲午夜久久久久中文字幕久| 中文字幕欧美日韩一区| 久久久夜色精品亚洲| 国产精品毛片a∨一区二区三区| 精品区一区二区| 欧美日韩综合在线| 色拍拍在线精品视频8848| 91视频一区二区三区| 视频一区二区三区入口| 丝袜美腿一区二区三区| 日韩精品五月天| 精品亚洲成a人| 91丨九色丨尤物| 日韩片之四级片| 精品国产免费久久| 中文字幕精品综合| 午夜精彩视频在线观看不卡| 一区二区欧美视频| 国产一区视频导航| 国产精品123| 欧美日韩在线不卡| 久久青草欧美一区二区三区| 亚洲精品成人少妇| 国模冰冰炮一区二区| 欧美理论在线播放| 伊人婷婷欧美激情| 菠萝蜜视频在线观看一区| 日韩视频一区二区| 亚洲一区二区免费视频| 激情综合五月天| 欧美日韩免费观看一区三区| 国产精品免费看片| 国产精品亚洲一区二区三区妖精 | 亚洲男人的天堂一区二区| 久久新电视剧免费观看| 国产精品资源在线观看| 色视频欧美一区二区三区| 夜夜爽夜夜爽精品视频| 国产精品主播直播| 日本一区二区三区国色天香| av成人免费在线观看| 亚洲123区在线观看| 555夜色666亚洲国产免| 久久se精品一区精品二区| 日韩欧美资源站| 99精品热视频| 亚洲国产精品一区二区久久恐怖片| aaa欧美大片| 裸体一区二区三区| 国产精品日韩精品欧美在线| 欧美午夜理伦三级在线观看| 91网站视频在线观看| 一区二区三区四区在线免费观看| av在线综合网| 五月天网站亚洲| 亚洲图片你懂的| 国产欧美精品一区二区三区四区| 欧美图片一区二区三区| 国产成人免费视频网站| 奇米精品一区二区三区在线观看一| 国产精品色在线观看| 2023国产精品| 欧美一区二视频| 日韩片之四级片| 日韩欧美亚洲国产精品字幕久久久| 成人午夜私人影院| 91在线精品一区二区三区| 日本不卡123| 男女性色大片免费观看一区二区| 亚洲精品ww久久久久久p站| 国产视频一区在线观看| 国产精品视频第一区| 日本一区二区三区四区在线视频| 久久久久国产精品厨房| 欧美激情在线一区二区三区| 欧美精品一区二区蜜臀亚洲| 亚洲人成影院在线观看| 亚洲激情图片qvod| 蜜臀久久久99精品久久久久久| 亚洲午夜久久久久久久久电影网 | 国产欧美日韩在线观看| 综合久久久久综合| 亚洲黄色免费电影| 日本aⅴ免费视频一区二区三区| 国产精品亚洲人在线观看| 欧美主播一区二区三区| 日韩欧美一区中文| 国产精品视频在线看| 亚洲va国产va欧美va观看| 日本中文字幕不卡| av亚洲精华国产精华| 欧美午夜在线观看| 国产精品美女久久久久久久| 亚洲精品午夜久久久| 国产精品白丝jk白祙喷水网站| 欧美日韩国产综合一区二区| 亚洲色欲色欲www| 日本不卡视频一二三区| 欧美丝袜丝交足nylons| 欧美变态tickle挠乳网站| 日韩国产欧美视频| 99久久精品一区| 国产日韩欧美a| 国产99久久久国产精品潘金网站| 91福利在线看| 亚洲视频图片小说| 欧美日韩一级大片网址| 国产女主播一区| 免费高清在线一区| 成人app在线| 久久综合色一综合色88| 亚洲成人先锋电影| 国产高清久久久久| 久久一二三国产| 国产成人亚洲精品青草天美| 91精品国产91久久久久久一区二区 | 日本中文在线一区| 国产精品热久久久久夜色精品三区 | 亚洲视频一区二区在线| 国产成人99久久亚洲综合精品| 天堂影院一区二区| 欧美日产国产精品| 麻豆成人免费电影| 日韩三级.com| 91论坛在线播放| 日本女优在线视频一区二区| 欧美伦理电影网| 日韩av不卡一区二区| 精品欧美一区二区久久| 日本伊人午夜精品| 国产片一区二区三区| 91豆麻精品91久久久久久| 欧美一级二级三级乱码| 亚洲欧美日韩久久| 7777精品久久久大香线蕉| 成人午夜视频福利| 亚洲视频香蕉人妖| 欧美大胆一级视频| av亚洲精华国产精华| 国产一区二区伦理| 国产精品不卡一区| 欧美中文字幕一二三区视频| 国产一区啦啦啦在线观看| 图片区小说区区亚洲影院|