婷婷综合国产,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
    91美女在线观看| 粉嫩aⅴ一区二区三区四区| 国产精品视频免费看| 精品日韩在线一区| 日韩精品资源二区在线| 欧美成人高清电影在线| 精品嫩草影院久久| 久久综合色之久久综合| 久久久久99精品一区| 久久精子c满五个校花| 国产欧美日韩亚州综合 | 青草av.久久免费一区| 亚洲成人精品影院| 日韩高清欧美激情| 色www精品视频在线观看| 91免费版pro下载短视频| 不卡的av电影| 欧美视频三区在线播放| 制服丝袜亚洲精品中文字幕| 欧美本精品男人aⅴ天堂| 久久综合久久综合久久| 最新久久zyz资源站| 有坂深雪av一区二区精品| 日韩中文字幕91| 国产成人在线网站| 99久久久国产精品免费蜜臀| 欧美日韩在线电影| 精品国产网站在线观看| 亚洲激情自拍视频| 蜜臀av一区二区| 国产精品一区一区三区| 99视频一区二区三区| 4hu四虎永久在线影院成人| 亚洲午夜在线视频| 国产麻豆91精品| 欧美视频精品在线观看| 日本一区二区三区电影| 亚洲一区二区三区不卡国产欧美| 精品在线一区二区三区| 99久久er热在这里只有精品66| 欧美日韩国产精品成人| 久久人人超碰精品| 婷婷开心激情综合| 色综合亚洲欧洲| 国产校园另类小说区| 亚洲777理论| 99国产精品国产精品毛片| 制服丝袜亚洲色图| 亚洲综合男人的天堂| 国产成人av福利| 日韩一级大片在线| 亚洲一区在线观看免费观看电影高清| 欧美视频一二三区| 成人免费一区二区三区视频| 另类调教123区| 欧美女孩性生活视频| 亚洲乱码精品一二三四区日韩在线| 久久99精品久久久久久动态图| 日本韩国欧美在线| 久久久蜜臀国产一区二区| 亚洲免费观看高清完整版在线| 成人晚上爱看视频| 欧美激情一区二区三区不卡 | 色综合天天综合在线视频| 久久在线观看免费| 美女脱光内衣内裤视频久久网站 | 韩国成人精品a∨在线观看| 欧美性色aⅴ视频一区日韩精品| 国产精品天天看| www.av亚洲| 中文字幕乱码亚洲精品一区| 丰满岳乱妇一区二区三区| 久久精品欧美一区二区三区麻豆| 国产丶欧美丶日本不卡视频| 久久夜色精品国产噜噜av| 国产精品99久久久久久宅男| 日韩欧美久久久| 国产综合成人久久大片91| 国产亚洲欧美日韩日本| 成人午夜碰碰视频| 国产精品天干天干在线综合| 成人一级视频在线观看| 亚洲国产精品高清| 色综合天天综合| 天堂蜜桃91精品| 26uuu久久天堂性欧美| 91首页免费视频| 一区二区三区不卡在线观看 | 亚洲二区在线视频| 日韩欧美自拍偷拍| 国产精品资源在线观看| 国产精品激情偷乱一区二区∴| thepron国产精品| 亚洲综合色自拍一区| 欧美性生活大片视频| 另类调教123区 | 欧美色大人视频| 美女视频一区二区| 国产精品久久777777| 7777精品伊人久久久大香线蕉完整版| 九一九一国产精品| 久久久五月婷婷| 色哟哟在线观看一区二区三区| 日韩—二三区免费观看av| 欧美大胆一级视频| 久久99精品国产麻豆不卡| 中文字幕亚洲一区二区va在线| 51午夜精品国产| 99久久精品情趣| jlzzjlzz国产精品久久| 日日夜夜一区二区| 自拍偷拍国产精品| 91精品在线观看入口| www.亚洲人| 日韩精品视频网| 亚洲蜜桃精久久久久久久| 日韩欧美一区二区不卡| 色呦呦国产精品| 成人免费高清在线| 麻豆成人在线观看| 亚洲影院理伦片| 中日韩免费视频中文字幕| 欧美三级韩国三级日本三斤 | 日本不卡视频一二三区| 国产精品网站在线播放| 日韩免费观看2025年上映的电影| 91丨九色丨蝌蚪富婆spa| 精品制服美女丁香| 蜜桃一区二区三区在线| 日韩av中文在线观看| 亚洲特黄一级片| 中文字幕一区二区三区四区| 2024国产精品视频| 日韩欧美色电影| 欧美日本不卡视频| 日本道色综合久久| 国产成人在线免费观看| 久久av中文字幕片| 日本不卡123| 日韩电影免费在线观看网站| 午夜视频一区二区| 中文字幕一区二区不卡| 国产精品色一区二区三区| 国产三级精品三级| 久久久久久99久久久精品网站| 精品99一区二区| 国产亚洲一区字幕| 国产三级欧美三级日产三级99| 精品久久五月天| 国产亚洲一区二区三区在线观看| 欧美日韩不卡在线| 欧美视频精品在线观看| 久久久国产精品不卡| 欧美精品一区二区三区视频| 久久综合99re88久久爱| 国产欧美一区二区精品性| 国产亚洲福利社区一区| 国产嫩草影院久久久久| 成人免费在线视频| 一区二区在线免费| 亚洲一区在线视频观看| 视频一区视频二区在线观看| 欧美aaaaa成人免费观看视频| 久久99精品久久久久婷婷| 高清免费成人av| 色94色欧美sute亚洲13| 欧美精品久久久久久久多人混战| 日韩亚洲欧美中文三级| 国产欧美日本一区二区三区| 亚洲日本一区二区| 香蕉久久一区二区不卡无毒影院| 午夜精品久久久久久不卡8050| 毛片av一区二区| 国产综合成人久久大片91| 91网站在线播放| 欧美日韩国产电影| 久久亚洲精品小早川怜子| 亚洲va欧美va人人爽| 国产麻豆午夜三级精品| 在线观看视频一区二区欧美日韩| 欧美一区二区人人喊爽| 中文字幕一区不卡| 麻豆精品精品国产自在97香蕉| 成人综合激情网| 欧美一区日韩一区| 国产精品妹子av| 美女视频黄久久| 色播五月激情综合网| 久久综合久久99| 亚洲1区2区3区4区| 成人av在线电影| 欧美哺乳videos| 亚洲国产精品一区二区久久恐怖片 | 久久久99精品久久| 亚洲国产欧美一区二区三区丁香婷| 久久精品国产精品青草| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美一区二区三区在线| 国产精品成人免费| 精品一区二区三区在线视频|