数据结构相关模块(堆)

如果学过数据结构就知道 堆排序,python提供了一个堆队列的模块heapq能很容易实现堆排序

heapd

如果要获取一个列表中N个最大最小的元素,heapd提供了两个函数:nlargest()nsmallest

import heapqnums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2]
print(heapq.nlargest(3, nums)) # Prints [42, 37, 23]print(heapq.nsmallest(3, nums)) # Prints [-4, 1, 2]

两个函数都能接受一个关键字参数,用于更复杂的数据结构中:

portfolio = [{‘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}]
cheap = heapq.nsmallest(3, portfolio, key=s[‘price‘])
expensive = heapq.nlargest(3, portfolio, key=s[‘price‘])
时间: 2024-10-12 21:48:08

数据结构相关模块(堆)的相关文章

数据结构相关模块(字典)

1.多值映射 一般的字典都是一个键对应一个值.为了想要实现多值映射就需要一个容器,列表或者集合,比如: d = {'a' : [1, 2, 3],'b' : [4, 5]}e = {'a' : {1, 2, 3},'b' : {4, 5}} 如果要实现上面的,就必须先对键值进行初始化为列表或者集合: d={} d.setdefault('a', []).append(1) 如果我们用collections模块下的defaultdict来实现就简单好多 d = defaultdict(list)f

数据结构相关模块(列表)

所有内容参照自 python cookbook 1.解压序列赋值给多个变量 一般来讲我们赋值变量是这样: a = 1 python可以这样: a,b = 1,2 或者这样: e=[1,2,3,4] a,b,c,d=e 当然 你想解压几层就解压几层,比如这样: data = [ 'ACME', 50, 91.1, (2012, 12, 21) ] name, shares, price, (year, mon, day) = data 如果你只是想要其中的几个变量,这....python没有给出特

[数据结构学习备忘录]堆及其堆排序

[数据结构学习备忘录] 堆 一种数据结构,物理存储方式:数组 逻辑存储方式:近似于完全二叉树,假定i为堆元素的序数[Index],那么i/2就是该元素的左子树,(i/2 + 1)就是该元素的右子树,分为两种堆:大根堆.小根堆:这两种堆的区别是:大根堆的根节点元素的值比左右子树的值都要大,小根堆则相反. 可用这种数据结构进行排序,称为堆排序. 与该数据结构相关的关键算法: ①   MaxHeaplfy 当堆的元素顺序出现错误时的调整函数 ②   BulidMax[min]Heap 建立大[小]根堆

2、NS3-目录结构和相关模块

Waf是基于Python开发的编译工具,ns-3系统本身和将要写的仿真代码都由waf负责编译运行. Scratch目录一般存放用户脚本文件,也可以把要运行的例子拷贝到该目录下. Example是ns-3提供的关于如何使用ns-3的例子,包含许多模块的使用. Doc目录是帮助文档,可以使用./waf --doxygen编译本地Doxygen文档. Build目录是ns-3编译目录,包含编译文件时使用的共享库和头文件(build/ns3). Src是ns-3源码目录. 模块里面的wscript文件结

数据结构—串的堆分配

#include<stdio.h> #include<stdlib.h> typedef struct { char *ch; int length; }HString; void StrAssign(HString &T,char *chars); void StrLength(HString S); void StrCompare(HString S,HString T); void ClearString(HString &S); void Concat(HS

ansible 软件相关模块,剧本

软件相关模块 yum rpm和yum的区别 rpm:redhat package manager yum 可以解决依赖关系 yum 源配置 使用yum下载时需要先下载epel [epel] name=Extra Packages for Enterprise Linux 7 - $basearch #名字 baseurl=http://mirrors.aliyun.com/epel/7/$basearch #rpm源的地址,可以写http,https,ftp,Samba,file: failov

数据结构之基于堆的优先队列

优先队列的最重要的操作:删除最大元素(或最小)和插入元素.数据结构二叉堆能够很好的实现队列的基本操作.二叉堆的结点按照层级顺序放入数组,用长度为N+1的私有数组pq来表示一个大小为N的堆(堆元素放在pq[1]至pq[N]之间,为方便计数,未使用pq[0]),跟节点在位置1,它的子结点在位置2和3,以此类推.位置k的节点的父节点位置为k/2,它的两个子节点位置分别为2k和2k+1.当一颗二叉树的每个节点都大于等于它的两个子节点时,称为大根堆.当一颗二叉树的每个节点都小于等于它的两个子节点时,称为小

数据结构--左式堆的思想和代码

左式堆也是实现优先列队的一种数据结构,和二叉堆一样,左式堆也具有堆序性和结构性. 堆序性: 一个节点的后裔都大于等于这个节点. 结构性:左式堆也是二叉树,和二叉堆的唯一区别在于左式堆不是理想平衡的,实际上是趋于非常不平衡,对于堆中每一个节点X,左儿子的零路径长至少与右儿子的零路径长一样大,零路径长Npl的定义为:节点到一个没有两个儿子的节点的最短路径长,因此具有0个或者1个儿子节点的Npl为0,Npl(NULL) = -1. 左式堆可以高效的支持合并操作,而插入和删除操作都可以通过合并操作来实现

saltstack模块之pkg相关模块

1.pkg.available_version模块 pkg.available_version: 返回所查询软件包可供安装或更新的最新版本.如果指定多个软件包,则以字典的形式输出返回结果. [[email protected] ~]# salt '*' pkg.available_version httpd salt-minion02.contoso.com:     2.2.15-59.el6.centos salt-minion01.contoso.com:     2.2.15-59.el