Python heapq使用详解及实例代码

 更新时间:2017年01月25日 08:54:02   作者:纯臻  
这篇文章主要介绍了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自动创建Markdown表格使用实例探究

    Python自动创建Markdown表格使用实例探究

    Markdown表格是文档中整理和展示数据的重要方式之一,然而,手动编写大型表格可能会费时且容易出错,本文将介绍如何使用Python自动创建Markdown表格,通过示例代码详细展示各种场景下的创建方法,提高表格生成的效率
    2024-01-01
  • python 划分数据集为训练集和测试集的方法

    python 划分数据集为训练集和测试集的方法

    今天小编就为大家分享一篇python 划分数据集为训练集和测试集的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • TensorFlow实现数据增强的示例代码

    TensorFlow实现数据增强的示例代码

    ‌TensorFlow数据增强‌是一种通过变换和扩充训练数据的方法,本文主要介绍了TensorFlow实现数据增强的示例代码,具有一定的参考价值,感兴趣的可以了解游戏
    2024-08-08
  • python产生模拟数据faker库的使用详解

    python产生模拟数据faker库的使用详解

    这篇文章主要介绍了python产生模拟数据faker库的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python对离散变量的one-hot编码方法

    python对离散变量的one-hot编码方法

    今天小编就为大家分享一篇python对离散变量的one-hot编码方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python serial串口通信示例详解

    python serial串口通信示例详解

    Python的serial库是一个用于串口通信的强大工具,它提供了一个简单而灵活的接口,可以方便地与串口设备进行通信,包括与驱动电机进行通信,这篇文章主要介绍了python serial串口通信,需要的朋友可以参考下
    2023-12-12
  • python Opencv将图片转为字符画

    python Opencv将图片转为字符画

    这篇文章主要为大家详细介绍了python Opencv将图片转为字符画的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 浅谈python日志的配置文件路径问题

    浅谈python日志的配置文件路径问题

    下面小编就为大家分享一篇浅谈python日志的配置文件路径问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Django数据库操作的实例(增删改查)

    Django数据库操作的实例(增删改查)

    下面小编就为大家带来一篇Django数据库操作的实例(增删改查)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • pandas df.sample()的使用

    pandas df.sample()的使用

    本文主要介绍了pandas df.sample()的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论