#coding=utf-8
# 堆(Heap)
# heapq
from heapq import *
from random import *
# 定义一个堆,其实堆就是一个列表,只是通过heapq模块中的函数利用堆算法来改变列表中的元素而已
data = [1, 2, 3, 4, 5, 6,7,8,9]
heap = []
for n in data:
# 利用choice函数从data列表中随机选择9个数(可能有重复的数)
value = choice(data)
# 使用heappush函数将value添加到堆
heappush(heap,value)
print(heap) # [1, 2, 2, 5, 4, 6, 5, 6, 9]
# 将2.5添加进堆
heappush(heap,2.5)
print(heap) # [1, 2, 2, 5, 2.5, 6, 5, 6, 9, 4]
# 弹出heap中的最小值,并获取这个最小值,运行结果:1
print(heappop(heap))
print(heap) # [2, 2, 4, 5, 2.5, 6, 5, 6, 9]
data1 = [6,3,1,12,8]
# 将data1转化为堆(直接修改了data1)
heapify(data1)
print(data1) # [1, 3, 6, 12, 8]
# 弹出data1中的最小值,并将100添加进堆
heapreplace(data1, 100)
print(data1) # [3, 8, 6, 12, 100]
# 得到data1中的最大值,运行结果:[100]
print(nlargest(1,data1))
# 得到data1中最大的前2个值,运行结果:[100,12]
print(nlargest(2,data1))
# 得到data1中最小的值,运行结果:[3]
print(nsmallest(1,data1))
# 得到data1中最小的前3个值,运行结果:[3, 6, 8]
print(nsmallest(3,data1))
# 合并多个有序的列表,并得到一个新的有序列表
print(list(merge([1,3,1234,7], [0,2,4,8], [5, 10, 15, 20], [], [25]))) # [0, 1, 2, 3, 4, 5, 8, 10, 15, 20, 25, 1234, 7]
# 合并多个有序的列表, 并通过key关键字指定一个函数len,也就是说,会按列表元素值的长度进行排序
print(list(merge(['dog', 'horse'], ['cat', 'fish', 'kangaroo'], key=len))) # ['dog', 'cat', 'fish', 'horse', 'kangaroo']
python 堆(Heap)
最新推荐文章于 2024-02-18 10:37:30 发布