文档章节

heapq( Heap queue algorithm)

我是菜鸟我骄傲
 我是菜鸟我骄傲
发布于 2017/09/06 18:07
字数 501
阅读 14
收藏 0

heapq( Heap queue algorithm)库

从集合中取前n个最大,或最小的值

nlargest(n,iterable)前n个最大的,nsmallest(n,iterable)前n个最小的

import heapq

nums=[1,23,32,45,67,21,78,12]

print("3 largest",heapq.nlargest(3,nums))
print("3 smallest",heapq.nsmallest(3,nums))
3 largest [78, 67, 45]
3 smallest [1, 12, 21]

从字典中取前n个最大,或最小的值

nlargest(n,dicts,key)按照key取前n个最大的,nsmallest(n,dicts,key)按照key取前n个最小的

dicts=[
    {'name': 'IBM', 'shares': 100, 'price': 91.1},
    {'name': 'AAPL', 'shares': 50, 'price': 543.22},
    {'name': 'FB', 'shares': 200, 'price': 21.09},
    {'name': 'HPQ', 'shares': 35, 'price': 31.75},
    {'name': 'YHOO', 'shares': 45, 'price': 16.35},
    {'name': 'ACME', 'shares': 75, 'price': 115.65}
]

print("2 largest",heapq.nlargest(2,dicts,key=lambda s:s['price']))
print("2 smallest",heapq.nsmallest(2,dicts,key=lambda s:s['price']))
2 largest [{'name': 'AAPL', 'price': 543.22, 'shares': 50}, {'name': 'ACME', 'price': 115.65, 'shares': 75}]
2 smallest [{'name': 'YHOO', 'price': 16.35, 'shares': 45}, {'name': 'FB', 'price': 21.09, 'shares': 200}]

heapify(X),将list X转换为堆

print("heap before:",nums)
heapq.heapify(nums)
print("heap after:",nums)
heap before: [1, 23, 32, 45, 67, 21, 78, 12]
heap after: [1, 12, 21, 23, 67, 32, 78, 45]

heappush(heap, item)

往堆里push一个元素

heapq.heappush(nums,10)

print("push 10 :",nums)
push 10 : [1, 10, 21, 12, 67, 32, 78, 45, 23]

heappop(heap)

从堆中pop一个最小的值,并从堆中移除这个值, 如果heap为空,抛出异常:IndexError: index out of range

smallest = heapq.heappop(nums)
print(smallest)
print("pop after:",nums)
#smallest = heapq.heappop([])
1
pop after: [10, 12, 21, 23, 67, 32, 78, 45]

heappushpop(heap, item)

push一个元素 , 然后pop一个最小的元素,类似与先调用一个 heappush() 然后再调用一个heappop方法

smallest = heapq.heappushpop(nums,100)
print("heappushpop 100, ",smallest)

###push一个最小的值,
smallest = heapq.heappushpop(nums,1)
print("heappushpop smallest value 1 and then return :",smallest)
heappushpop 100,  10
heappushpop smallest value 1 and then return : 1

heapreplace(heap, item)

先pop最小的值,然后再push item,如果heap为空,抛出异常:IndexError: index out of range

smallest = heapq.heapreplace(nums,1)
print("heapreplace smallest value 1 and then return :",smallest)

heapreplace smallest value 1 and then return : 12

merge(*iterables, key=None, reverse=False)

合并多个集合,返回堆排序后的数据,类型为 iterator


newheap = heapq.merge(nums,[10,11,23])
print(newheap)

for item in newheap:
    print(item)

<generator object merge at 0x0000000004EB4AF0>
1
10
11
23
21
23
45
67
32
78
100

© 著作权归作者所有

共有 人打赏支持
我是菜鸟我骄傲
粉丝 13
博文 224
码字总数 139926
作品 0
西安
架构师
私信 提问
heapq取列表最大或最小值元素

在一个集合中获取最大或者最小的n个元素,这时候就可以使用heapq模块中有nlargest和nsmallest函数可以达到需求 heapq介绍: heapq模块实现了python中的堆排序,并提供了有关方法。让用Python实...

梧桐0928
06/26
0
0
1.4 查找N项中的最大最小值

问题: 你想获取一个关于给定集合中最大最小值的列表 解法: heapq模块 有两个方法 nlargest() 和 nsmallest()方法,它们正是你所需的~!(撒花) >>> import heapq>>> nums = [1, 8, 2, 23,...

Marmot_Alex
2014/05/10
0
0
每周一个 Python 模块 | heapq

专栏地址:每周一个 Python 模块 heapq 实现了适用于 Python 列表的最小堆排序算法。 堆是一个树状的数据结构,其中的子节点与父节点属于排序关系。可以使用列表或数组来表示二进制堆,使得元...

yongxinz
昨天
0
0
Oversea company interview question.

network, web, database, Linux system Interview Questions Given a list of numbers, find a fastest sort algorithm Describe TCP hand shake process Describe DB master-slave process ......

陈昊Sevens
2016/08/23
18
0
List of Python Tutorials

Python Home Introduction Running Python Programs (os, sys, import) Modules and IDLE (Import, Reload, exec) Object Types - Numbers, Strings, and None Strings - Escape Sequence, R......

好铁
2016/04/01
22
0

没有更多内容

加载失败,请刷新页面

加载更多

hive load insert

本文主要是翻译Hive官网关于Load的解释,原文来源于:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Loadingfilesintotables 介绍 Hive Load语句......

hblt-j
10分钟前
0
1
spring cloud中微服务之间的调用以及eureka的自我保护机制

我自己搭建了一个客户端微服务: 所以现在有两个微服务,我们所实现的就是微服务1和微服务2之间的调用 注册中心就不用多说了,具体看一下两个微服务 在project-solr中的constroller中: @Res...

架构师springboot
13分钟前
0
0
从源码角度理解Java设计模式——装饰者模式

一、饰器者模式介绍 装饰者模式定义:在不改变原有对象的基础上附加功能,相比生成子类更灵活。 适用场景:动态的给一个对象添加或者撤销功能。 优点:可以不改变原有对象的情况下动态扩展功...

我叫刘半仙
18分钟前
0
0
Java中前台接收后台List数据并循环打印

在Java后端获取到了数据,然后我们需要传到前端页面展现出来。 方法有两种: 方法一: 后端: request.setAttribute("list",list); 前端: <%ArrayList list = (ArrayList) request.get...

小_橙_子
27分钟前
1
0
Java:字节流和字符流(输入流和输出流)

什么是流 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互...

编程SHA
27分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部