heapq模块中的两个函数——nlargest()和nsmallest()

这两个函数可以帮助我们在某个集合中找出最大或最小的N个元素。例如:

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

如果正在寻找最大或者最小的N个元素,且同集合中元素的总数目相比,N很小,那么下面这些函数就可以提供更好的性能。这些函数首先会在底层将数据转化成列表,且元素会以堆得顺序排列。例如:

>>> nums=[1,8,2,23,7,-4,18,23,42,37,2]
>>> import heapq
>>> heap=list(nums)
>>> heapq.heapify(heap)#将列表原地转换成堆
>>> heap
[-4, 2, 1, 23, 7, 2, 18, 23, 42, 37, 8]

堆最重要的特性就是,heap[0]总是最小的那个元素,此外,接下来的最小元素可以一次通过heapq.heappop()的方法轻松的找到。该方法会将第一个元素(最小的)弹出,然后以第二小的元素取而代之。例如,要找到第三小的元素,可以这样做:

>>> heapq.heappop(heap)
-4
>>> heapq.heappop(heap)
1
>>> heapq.heappop(heap)
2
另外,heapq.heappush()的功能是把一项值压入堆,同时维持堆得排序要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值