当前位置:   article > 正文

python中heapq模块(堆算法)_python heaqp

python heaqp

目录

python中堆的特征

heapq模块

使用heappush创建堆

将列表转化为最小堆

将元素压入堆

从堆中弹出元素

使用heapplace弹出元素的同时压入新的元素

 找出最大或最小的多个元素


python中堆的特征

堆(heap)是一种特殊的树形结构,通常以完全二叉树的形式进行组织,根节点的值小于等于该节点所有子节点的值。

注意:在python中的heapq默认是最小堆!

特点:

1、可以以任意顺序添加对象

2、可以随时找出最小元素,并执行其他操作(删除等)

3、比使用列表的min方法效率高。

heapq模块

python中没有独立的堆类型,可以使用heapq模块来实现,主要包含6个函数

函数描述
heappush(heap,x)将x压入堆中
heappop(heap)从堆出弹出最小的元素
heapify(heap)让列表转换为堆
heapplace(heap,x)弹出最小的元素,并将x压入堆
nlargest(n,iter)返回iter中n个最大的元素
nsmallest(n,iter)

返回iter中n个最小的元素

使用heappush创建堆

  1. from heapq import *
  2. from random import shuffle
  3. data = list(range(10))
  4. shuffle(data)
  5. print(f'原始数据为:{data}')
  6. heap = []
  7. for n in data:
  8. heappush(heap, n)
  9. print(f'创建的堆为:{heap}')
'
运行
  1. 原始数据为:[1, 5, 2, 0, 9, 7, 3, 4, 8, 6]
  2. 创建的堆为:[0, 1, 2, 4, 6, 7, 3, 5, 8, 9]
'
运行

将列表转化为最小堆

  1. my_list = [1,2,3,4,5]
  2. shuffle(my_list)
  3. heapify(my_list)
  4. print(my_list)
[1, 2, 4, 5, 3]
'
运行

将元素压入堆

  1. heappush(heap,10)
  2. print(heap)
[0, 1, 2, 4, 3, 8, 6, 9, 5, 7, 10]

从堆中弹出元素

原始堆为[0, 1, 2, 4, 3, 8, 6, 9, 5, 7, 10]

  1. print(heappop(heap))
  2. print(heappop(heap))
  3. print(heap)
  1. 0
  2. 1
  3. [2, 4, 3, 6, 5, 7, 8, 10, 9]
'
运行

使用heapplace弹出元素的同时压入新的元素

  1. print(heapreplace(heap,0))
  2. print(heap)

 

  1. 2
  2. [0, 6, 3, 7, 9, 5, 4, 10, 8]
'
运行

 

 找出最大或最小的多个元素

  1. print(nsmallest(3,heap))
  2. print(nlargest(3,heap))
  1. [0, 3, 4]
  2. [10, 9, 8]
'
运行

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/1020066
推荐阅读
相关标签
  

闽ICP备14008679号