堆排序heapq的用法

基本用法:

复杂数据结构:

# coding=utf-
# example.py
# Example of using heapq to find the N smallest or largest items
import heapq
portfolio = [
{'name': 'IBM', 'shares': , 'price': 91.1},
{'name': 'AAPL', 'shares': , 'price': 543.22},
{'name': 'FB', 'shares': , 'price': 21.09},
{'name': 'HPQ', 'shares': , 'price': 31.75},
{'name': 'YHOO', 'shares': , 'price': 16.35},
{'name': 'ACME', 'shares': , 'price': 115.65}
]
cheap = heapq.nsmallest(, portfolio, key=lambda s: s['price']) #对price进行排序
expensive = heapq.nlargest(, portfolio, key=lambda s: s['price'])
print(cheap)
print(expensive)

输出结果:

H:\Python27_64\python.exe H:/myfile/python-cookbook-master/src//finding_the_largest_or_smallest_n_items/example.py
[{'price': 16.35, 'name': 'YHOO', 'shares': }, {'price': 21.09, 'name': 'FB', 'shares': }, {'price': 31.75, 'name': 'HPQ', 'shares': }]
[{'price': 543.22, 'name': 'AAPL', 'shares': }, {'price': 115.65, 'name': 'ACME', 'shares': }, {'price': 91.1, 'name': 'IBM', 'shares': }] 进程已结束,退出代码0

列出一些常见的用法:

heap = []#建立一个常见的堆

heappush(heap,item)#往堆中插入一条新的值

item = heappop(heap)#弹出最小的值

item = heap[0]#查看堆中最小的值,不弹出

heapify(x)#以线性时间将一个列表转为堆

item = heapreplace(heap,item)#弹出一个最小的值,然后将item插入到堆当中。堆的整体的结构不会发生改变。
heappoppush()#弹出最小的值,并且将新的值插入其中

merge()#将多个堆进行合并

nlargest(n , iterbale, key=None)从堆中找出做大的N个数,key的作用和sorted( )方法里面的key类似,用列表元素的某个属性和函数作为关键字

实验:

a=range(,,-)
print a
[, , , , ]
print heapq.nlargest(,a)
[, , ]
heapq.heapify(a)
print a,a[]
[, , , , ]
print heapq.heappop(a),heapq.heappop(a) print a,'>>>'
[, , ] >>>
heapq.heappush(a,)      #直接放在堆的最后
print a
[, , , ]
heapq.heapreplace(a,7.5) #删一个左边的,item插进去
print a
[, 7.5, , ]
heapq.heappushpop(a,8.5) #删一个左边的,item插最后
print a
[7.5, , , 8.5]
a.sort()
print a
[7.5, , 8.5, ]
print a[]
#多个堆进行合并

b=range(,)
heapq.heapify(b)
c=range(,)
c.append([,])
print c
[, , , [, ]] heapq.heapify(c)
print c
[, , , [, ]] print list(heapq.merge(b,c))
[, , , , , , [, ]]

找到最大或最小的N个元素---heapq模块的更多相关文章

  1. 找到最大或最小的N个元素

    问题: 想在某个集合中找到最大或最小的N个元素 解决方案: heapq 模块中有两个函数  nlargest() 和 nsmallest()  它们正是我们需要的.例如: import heapq n ...

  2. 【python cookbook】【数据结构与算法】4.找到最大或最小的N个元素

    问题:想在某个集合中找出最大或最小的N个元素 解决方案:heapq模块中的nlargest()和nsmallest()两个函数正是我们需要的. >>> import heapq &g ...

  3. 找到最大或者最小的N个元素

    heapq模块中的两个函数nlargest()和nsmallest() import heapq nums = [1,5,6,458,6,787,5,45,6] print(heapq.nlarges ...

  4. 【编程题目】查找最小的 k 个元素

    5.查找最小的 k 个元素(数组)题目:输入 n 个整数,输出其中最小的 k 个.例如输入 1,2,3,4,5,6,7 和 8 这 8 个数字,则最小的 4 个数字为 1,2,3 和 4. 算法里面学 ...

  5. 排序,求几个最值问题,输入n个整数,输出其中最小的k个元素。

    看完两个求最大值算法之后的一些感想. 如果想直接看算法的可以跳过.但是我觉得我这些想法还是比较有用的,至少对我将来的算法设计是这样的. 算法的功能越强大,必然意味着速度慢,因为根据丛林法则,那种慢又功 ...

  6. python中使用heapq查看最大与最小的N个元素列表

    怎么从一个集合中获取最大或最小的N个元素列表? heapq模块有两个函数:nlargest() 和 nsmallest() 可以完美解决这个问题. In [39]: import heapq In [ ...

  7. 查找最小的k 个元素之C#算法实现

    紧接着上一篇微软编程面试100题,这次想解决的是查找最小的K个元素,题目是:输入n 个整数,输出其中最小的k 个.例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 ...

  8. 查找最小的K个元素,使用最大堆。

    查找最小的K个元素,使用最大堆,具体代码如下: #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace st ...

  9. 笔试题&amp;面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素

    设计一个复杂度为n的算法找到单向链表倒数第m个元素.最后一个元素假定是倒数第0个. 提示:双指针查找 相对于双向链表来说,单向链表仅仅能从头到尾依次訪问链表的各个节点,所以假设要找链表的倒数第m个元素 ...

随机推荐

  1. C++并发编程 互斥和同步

    C++并发编程 异步任务(async) 线程基本的互斥和同步工具类, 主要包括: std::mutex 类 std::recursive_mutex 类 std::timed_mutex 类 std: ...

  2. redis 字符串的管理的一点理解

    redis字符串可以实现通过地址偏移找到所在结构体的首地址,struct sdshdr *sh = (void *)(s - (sizeof(struct sdshdr))) 也就是通过buf地址可以 ...

  3. mac下c++代码阅读工具

    http://note.youdao.com/noteshare?id=101a265bb9d780444b6a03ca526b887a

  4. STL源码分析-priority_queue

    http://note.youdao.com/noteshare?id=402cd1487d34af1a11f0daac6d16132f

  5. 11.UiAutomator 相关JAVA知识

    一.封装方法与模块化用例 1.方法: 在JAVA中,方法就好比日常生活中的一个动作,由动作组合成一系列完整的操作. 方法结构: 方法修饰符 方法返回值类型 方法名 { 方法体 } 比如: public ...

  6. 4.redis设计与实现--跳跃表

    1.跳跃表由两个结构体构成: 2.总结:

  7. Codeforces 221 B. Little Elephant and Numbers

    B. Little Elephant and Numbers time limit per test 2 seconds memory limit per test 256 megabytes inp ...

  8. LightOJ 1244 - Tiles 猜递推+矩阵快速幂

    http://www.lightoj.com/volume_showproblem.php?problem=1244 题意:给出六种积木,不能旋转,翻转,问填充2XN的格子有几种方法.\(N < ...

  9. sql分页demo

    ALTER proc [dbo].[ProcGetUserInfoPageInfoByUserName] ), @PageIndex int, @PageSize int as Begin selec ...

  10. 如何发布一个自定义Node.js模块到NPM(详细步骤,附Git使用方法)

    咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...