Python heapq使用详解及实例代码


Posted in Python onJanuary 25, 2017

 Python heapq 详解

Python有一个内置的模块,heapq标准的封装了最小堆的算法实现。下面看两个不错的应用。

小顶堆(求TopK大)

话说需求是这样的: 定长的序列,求出TopK大的数据。

import heapq
import random

class TopkHeap(object):
  def __init__(self, k):
    self.k = k
    self.data = []

  def Push(self, elem):
    if len(self.data) < self.k:
      heapq.heappush(self.data, elem)
    else:
      topk_small = self.data[0]
      if elem > topk_small:
        heapq.heapreplace(self.data, elem)

  def TopK(self):
    return [x for x in reversed([heapq.heappop(self.data) for x in xrange(len(self.data))])]

if __name__ == "__main__":
  print "Hello"
  list_rand = random.sample(xrange(1000000), 100)
  th = TopkHeap(3)
  for i in list_rand:
    th.Push(i)
  print th.TopK()
  print sorted(list_rand, reverse=True)[0:3]

大顶堆(求BtmK小)

这次的需求变得更加的困难了:给出N长的序列,求出BtmK小的元素,即使用大顶堆。

算法实现的核心思路是:将push(e)改为push(-e)、pop(e)改为-pop(e)。

class BtmkHeap(object):
  def __init__(self, k):
    self.k = k
    self.data = []

  def Push(self, elem):
    # Reverse elem to convert to max-heap
    elem = -elem
    # Using heap algorighem
    if len(self.data) < self.k:
      heapq.heappush(self.data, elem)
    else:
      topk_small = self.data[0]
      if elem > topk_small:
        heapq.heapreplace(self.data, elem)

  def BtmK(self):
    return sorted([-x for x in self.data])

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
python解析文件示例
Jan 23 Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 Python
python正则表达式爬取猫眼电影top100
Feb 24 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
pycharm执行python时,填写参数的方法
Oct 29 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
python抓取搜狗微信公众号文章
Apr 01 Python
python实现趣味图片字符化
Apr 30 Python
python如何处理程序无法打开
Jun 16 Python
python输入中文的实例方法
Sep 14 Python
分布式全文检索引擎ElasticSearch原理及使用实例
Nov 14 Python
正确的理解和使用Django信号(Signals)
Apr 14 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 #Python
Python调用C++程序的方法详解
Jan 24 #Python
python中import学习备忘笔记
Jan 24 #Python
用python实现简单EXCEL数据统计的实例
Jan 24 #Python
Python如何import文件夹下的文件(实现方法)
Jan 24 #Python
利用Python脚本实现ping百度和google的方法
Jan 24 #Python
解决python2.7用pip安装包时出现错误的问题
Jan 23 #Python
You might like
php 阴历-农历-转换类代码
2012/01/16 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
PHP abstract与interface之间的区别
2013/11/11 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
微信小程序实现换肤功能
2018/03/14 Javascript
JavaScript常用数学函数用法示例
2018/05/14 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
详解javascript设计模式三:代理模式
2019/03/25 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
为python设置socket代理的方法
2015/01/14 Python
python套接字流重定向实例汇总
2016/03/03 Python
Python多进程分块读取超大文件的方法
2016/04/13 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
工作决心书
2014/03/11 职场文书
2014两会学习心得:榜样精神伴我行
2014/03/17 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
低碳日宣传活动总结
2014/07/09 职场文书
九一八事变演讲稿
2014/09/05 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
董事长秘书工作总结
2015/08/14 职场文书
Django drf请求模块源码解析
2021/06/08 Python
win10以太网连接不上怎么办?Win10连接以太网详细教程
2022/04/08 数码科技
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers