全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Python heapq使用详解及实例代码

 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  # heapq  # 详解  # heapq妙用  # heapq如何使用  # Python heapq库案例详解  # 详解python之heapq模块及排序操作  # Python利用heapq实现一个优先级队列的方法  # Python中的heapq模块源码详析  # 详解Python中heapq模块的用法  # python中heapq堆排算法的实现  # 求出  # 定长  # 是这样  # 希望能  # 谢谢大家  # 装了  # 变得更加  # 有一个  # random  # TopkHeap  # object  # def  # len  # lt  # heappush  # data  # Push  # elem  # 小顶堆 


相关文章: 官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  如何在阿里云通过域名搭建网站?  建站之星收费标准详解:套餐费用及年费价格表一览  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  定制建站是什么?如何实现个性化需求?  宝塔新建站点报错如何解决?  如何在宝塔面板中修改默认建站目录?  如何在IIS中配置站点IP、端口及主机头?  长沙企业网站制作哪家好,长沙水业集团官方网站?  网站制作的步骤包括,正确网址格式怎么写?  如何在阿里云服务器自主搭建网站?  如何在万网主机上快速搭建网站?  详解jQuery中基本的动画方法  如何通过.red域名打造高辨识度品牌网站?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  如何在建站宝盒中设置产品搜索功能?  如何配置FTP站点权限与安全设置?  如何通过商城自助建站源码实现零基础高效建站?  建站主机空间推荐 高性价比配置与快速部署方案解析  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  建站之星Pro快速搭建教程:模板选择与功能配置指南  如何快速打造个性化非模板自助建站?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  Python路径拼接规范_跨平台处理说明【指导】  北京网站制作公司哪家好一点,北京租房网站有哪些?  制作公司内部网站有哪些,内网如何建网站?  如何用PHP工具快速搭建高效网站?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  广州营销型建站服务商推荐:技术优势与SEO优化解析  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?    教程网站设计制作软件,怎么创建自己的一个网站?  建站之星图片链接生成指南:自助建站与智能设计教程  无锡营销型网站制作公司,无锡网选车牌流程?  如何快速生成ASP一键建站模板并优化安全性?  如何零基础在云服务器搭建WordPress站点?  宝塔建站助手安装配置与建站模板使用全流程解析  如何选择域名并搭建高效网站?  智能起名网站制作软件有哪些,制作logo的软件?  如何配置WinSCP新建站点的密钥验证步骤?  网站微信制作软件,如何制作微信链接?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  如何挑选最适合建站的高性能VPS主机?  微课制作网站有哪些,微课网怎么进?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  建站之星如何快速解决建站难题?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  如何高效完成独享虚拟主机建站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。