Python堆排序內建模組heapq

2021-09-27 12:40:47 字數 2643 閱讀 1449

挨個出數

合併獲取前n最大或最小的元素

實現優先佇列

其他方法

該模組提供了堆排序演算法的實現。

堆是一顆特殊的完全二叉樹。

小根堆:滿足任一節點都比其孩子節點小

大根堆:滿足任一節點都比其孩子節點大

使用heap.heapify(

list

)轉換列表成為堆結構

import heapq

import random

ls =

list

(range(10

))random.shuffle(ls)

heapq.heapify(ls)

# 注意,heapq建立的是小根堆

print

(ls)

)函式把值加入堆中

import heapq

import random

heap =

ls =

list

(range(10

))random.shuffle(ls)

for item in ls:

print

(heap)

import heapq

import random

ls =

list

(range(10

))random.shuffle(ls)

heapq.heapify(ls)

for i in

range

(len

(ls)):

print

)

將多個排序後的序列合併成乙個從小到大的序列,返回生成器

import heapq

num1 =[32

,3,5

,34,54

,23,132

]num2 =[23

,2,12

,656

,324,23

,54]num1 =

sorted

(num1)

num2 =

sorted

(num2)

res = heapq.merge(num1, num2)

print

(res)

# 生成器

import random

nums =

list

(range(10

))random.shuffle(nums)

print

(heapq.nlargest(n=

3, iterable=nums)

)# 獲取最大

print

(heapq.nsmallest(n=

3, iterable=nums)

)# 獲取最小

====

====

====

====

====

====

====

====

====

====

====

====

====

=from pprint import pprint

這兩個函式還接受乙個key引數,用於dict或其他資料結構型別使用

portfolio =[,

,,,,

]cheap = heapq.nsmallest(

3, portfolio, key=

lambda s: s[

'price'])

expensive = heapq.nlargest(

3, portfolio, key=

lambda s: s[

'price'])

pprint(cheap)

pprint(expensive)

heapq的 q 是優先佇列的意思

堆的值可以是元組型別,可以實現對帶權值的元素進行排序。

h =(

5,'write code'))

(7,'release product'))

(1,'write spec'))

(3,'create tests'))

(1,'bcreate tests'))

# 在heapq中,權值相同, 後新增的先輸出

print

)

其他:(1

) heapreplace: 刪除最小元素並且增加乙個元素

import heapq

import random

nums =

list

(range(10

))random.shuffle(nums)

heapq.heapify(nums)

heapq.heapreplace(nums,-1

)print

(nums)(2

如果大,則刪除第乙個元素,然後新增新的元素值,

否則不更改堆並且返回新增的值。

print9)

)# 返回彈出的最小值

print-90

))# 返回新增的值

python內建模組 Python 內建模組

內建模組 python有一套很有用的標準庫 standard library 標準庫會隨著python直譯器,一起安裝在你的電腦中的。它是python的 乙個組成部分。這些標準庫是python為你準備好的利器,可以讓程式設計事半功倍。常用標準庫 標準庫 說明 builtins 內建函式預設載入 os...

python堆排序演算法 Python 堆排序

python 堆排序 堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。largest i l 2 i 1 left 2 i...

堆排序python理解 堆排序Python實現

def heap sort nos global size size len nos print the size of the list is d size build heap size,nos for i in range size 1,0,1 nums 0 nums i nums i num...