Python 標準模組堆heapq詳解

2021-10-08 17:34:15 字數 1382 閱讀 9607

import heapq

nums = [ 8, 2, 23, 1, 7, -4, 18, 23, 42, 37, 2]

# heapq.heapify 將list x 轉換成堆,原地,線性時間內。

heapq.heapify(nums)

print(nums)

# 將 item 的值加入 heap 中,保持堆的不變性。

print(nums)

# 彈出並返回 heap 的最小的元素,保持堆的不變性。如果堆為空,丟擲 indexerror 。使用 heap[0] ,可以只訪問最小的元素而不彈出它。

print(nums)

# 訪問heap最小的值

small= nums[0]

print(small)

print(samll_one,nums)

# heapq.heapreplace(heap, item)

#彈出並返回 heap 中最小的一項,同時推入新的 item。 堆的大小不變。 如果堆為空則引發 indexerror。

second_small = heapq.heapreplace(nums, 90000)

print(second_small,nums)

# 反轉堆

heapq._heapify_max(nums)

print(11111,nums[0])

# 刪除堆中最大的

print("delete",nums)

# 彈出並返回 heap 中最大的一項,同時推入新的 item。 堆的大小不變。 如果堆為空則引發 indexerror。

heapq._heapreplace_max(nums, 90)

print(44444444444,nums)

# heapq.nlargest(n, iterable, key=none)

# 返回前三個比較大的list

large_list = heapq.nlargest(3, nums)

print(large_list)

# heapq.nsmallest(3, nums)

# 返回後三個比較小的list

last_list= heapq.nsmallest(3, nums)

print(last_list)

portfolio = [,,

,,

,]cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])

expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])

print(cheap)

print(expensive)

Python 堆(heap)的基本操作

python 堆 heap 的基本操作 import heapq 載入heap庫,heap指的是最小堆使陣列轉化為堆 heapq.heapify list heap 1,3,4,2,6,8,9 heapq.heapify heap heap 1,2,4,3,6,8,9 為heap增加元素 heap ...

堆 heap 排序演算法

堆排序演算法是複雜的排序演算法,是不穩定的排序演算法。1 堆排序的基本思想 堆排序定義 n個有序列a1,a2,an成為堆,有下面兩種不同型別的堆。大根堆 所有子節點都大於其父節點,即ai a2i且ai a2i 1。小根堆 所有子節點都小於其父節點,即ai a2i且ai a2i 1。若將此序列所儲存的...

堆(Heap)的實現

這次實現了堆,這個堆不是指系統堆疊的堆,是一種資料結構,見下圖 堆的本質就是乙個陣列 上圖中,紅色的是值,黑色的是下標 簡單的來說就是把乙個陣列看成是二叉樹,就像上圖 大堆和小堆分別是指根節點比孩子節點的值大或者是小,看了上圖之後就可以發現,父親節點和孩子節點之間下表的關係,parnet child...