Python内置的heapq模块

Python3.4版本中heapq包含了几个有用的方法:

heapq.heappush(heap,item):将item,推入heap

>>> items = [1,2,9,7,3]
    >>> heapq.heappush(items,10)
    >>> items
    [1, 2, 9, 7, 3, 10]
    >>>

heapq.heappop(heap):将heap的最小值pop出heap,heap为空时报IndexError错误

>>> heapq.heappop(items)#heap在pop时总是将最小值首先pop出
    1
    >>> items
    [2, 3, 9, 7, 10]
    >>>

heapq.heappushpop(heap,item):pop出heap中最小的元素,推入item

>>> items
    [2, 3, 9, 7, 10]
    >>> heapq.heappushpop(items,11)
    2
    >>> items
    [3, 7, 9, 11, 10]
    >>>

heapq.heapify(x):将list X转换为heap

>>> nums = [1,10,9,8]
    >>> heap = list(nums)
    >>> heapq.heapify(heap)
    >>> heap
    [1, 8, 9, 10]
    >>>

heapq.heapreplace(heap,item):pop出最小值,推入item,heap的size不变

>>> heap
    [1, 8, 9, 10]
    >>> heapq.heapreplace(heap,100)
    1
    >>> heap
    [8, 10, 9, 100]
    >>

heapq.merge(*iterable):将多个可迭代合并,并且排好序,返回一个iterator

>>> heap
    [8, 10, 9, 100]
    >>> heap1 = [10,67,56,80,79]
    >>> h = heapq.merge(heap,heap1)
    >>> list(h)
    [8, 10, 9, 10, 67, 56, 80, 79, 100]#需要 说明的是这里所谓的排序不是完全排序,只是两个list对应位置比较,
    #将小的值先push,然后大的值再与另外一个list的下一个值比较

heapq.nlargest(n,iterable,key):返回item中大到小顺序的前N个元素,key默认为空,可以用来指定规则如:function等来处理特定的排序

itemsDict=[
        {'name':'dgb1','age':23,'salary':10000},
        {'name':'dgb2','age':23,'salary':15000},
        {'name':'dgb3','age':23,'salary':80000},
        {'name':'dgb4','age':23,'salary':80000}
    ]
     
    itemsDictlarge = heapq.nlargest(3,itemsDict,lambda s:s['salary'])
    print(itemsDictlarge)
    [{'name': 'dgb3', 'age': 23, 'salary': 80000}, {'name': 'dgb4', 'age': 23, 'salary': 80000}, {'name': 'dgb2', 'age': 23, 'salary': 15000}]

如果没有指定key,那么就按照第一个字段来排序

heapq.nsmallest(n,iterable,key):返回item中小到大顺序的前N个元素,key默认为空,可以用来指定规则如:function等来处理特定的排序

这个函数的用法与上一个nlargest是一样的。

To create a heap, use a list initialized to[], or you can transform a populated list into a heap via functionheapify().

创建heap可以通过创建list,和使用heapify方法来实现。
---------------------  
from:https://blog.csdn.net/chuan_day/article/details/73554861

python heapq模块使用的更多相关文章

  1. Python heapq 模块的实现 - A Geek's Page

    Python heapq 模块的实现 - A Geek's Page Python heapq 模块的实现

  2. Python heapq模块

    注意,默认的heap是一个小顶堆! heapq模块提供了如下几个函数: heapq.heappush(heap, item) 把item添加到heap中(heap是一个列表) heapq.heappo ...

  3. Python常用数据结构之heapq模块

    Python数据结构常用模块:collections.heapq.operator.itertools heapq 堆是一种特殊的树形结构,通常我们所说的堆的数据结构指的是完全二叉树,并且根节点的值小 ...

  4. python标准库:collections和heapq模块

    http://blog.csdn.net/pipisorry/article/details/46947833 python额外的数据类型.collections模块和heapq模块的主要内容. 集合 ...

  5. python 中的堆 (heapq 模块)应用:Merge K Sorted Lists

    堆是计算机科学中一类特殊的数据结构的统称.堆通常是一个可以被看做一棵树的数组对象.在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短 ...

  6. python 关于heapq模块的随笔

    heapq模块提供了很多高级功能可以通过help(heapq)查看详细文档: 要点: 1优先级队列让我们可以按照重要程度来处理元素,而不是先进先出 2使用heapq可以应对长列表,因为heap不是复杂 ...

  7. [Python] heapq简介

    [Python] heapq简介 « Lonely Coder [Python] heapq简介 judezhan 发布于 2012 年 8 月 8 日 暂无评论 发表评论 假设你需要维护一个列表,这 ...

  8. python --- queue模块使用

    1. 什么是队列? 学过数据结构的人都知道,如果不知道队列,请Google(或百度). 2. 在python中什么是多生产者,多消费模型? 简单来说,就是一边生产(多个生产者),一边消费(多个消费者) ...

  9. python标准模块

    sys模块 这是一个跟python解释器关系密切的标准库.它提供了一些和python解释器操作密切的属性和函数. sys中常用的函数和属性: sys.argv: sys.argv是专门用来向pytho ...

随机推荐

  1. 基于 Python 和 Pandas 的数据分析(4) --- 建立数据集

    这一节我想对使用 Python 和 Pandas 的数据分析做一些扩展. 假设我们是亿万富翁, 我们会想要多元化地进行投资, 比如股票, 分红, 金融市场等, 那么现在我们要聚焦房地产市场, 做一些这 ...

  2. android 利用CountDownTimer实现时分秒倒计时效果

    https://blog.csdn.net/mrzhao_perfectcode/article/details/81289578

  3. 使用ajax判断登录用户名

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Register.aspx. ...

  4. Qt5文件操作_保存成"UTF-8"格式

    1. bool TdrawSvg::Save2File(char* _pcFullFileName) { // http://blog.csdn.net/u011314012/article/deta ...

  5. less 前端css利器 工程化、逻辑化 css 文件

    less LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承,运算, 函数. 1. 浏览器方式 1.1 html <!DOCTYPE html> <html lang=&q ...

  6. 关于JS历史

      js由来        95年那时,绝大多数因特网用户都使用速度仅为28.8kbit/s 的“猫”(调制解调器)上网,但网页的大小和复杂性却不断增加.为完成简单的表单验证而频繁地与服务器交换数据只 ...

  7. win10新系统修改onedrive目录,提示找不到OneDrive目录

    win10不知更新了什么,x1c非常卡一跳一跳的,很多年没见过了-_-!!( 原因排查:http://www.cnblogs.com/xuanmanstein/p/8878180.html). 于是重 ...

  8. Python Scrapy 爬取煎蛋网妹子图实例(一)

    前面介绍了爬虫框架的一个实例,那个比较简单,这里在介绍一个实例 爬取 煎蛋网 妹子图,遗憾的是 上周煎蛋网还有妹子图了,但是这周妹子图变成了 随手拍, 不过没关系,我们爬图的目的是为了加强实战应用,管 ...

  9. Python pickle使用

    2019-01-15 10:04:32 用于序列化的两个模块 json:用于字符串和Python数据类型间进行转换 pickle: 用于python特有的类型和python的数据类型间进行转换 jso ...

  10. h5游戏引擎有哪些

    h5游戏引擎有哪些 一.总结 一句话总结: Layabox Egret Pixi.js Three.js PlayCanvas Cocos2d-js Hilo 1.H5游戏开发语言? Flash_AS ...