美文网首页
Python3_Cookbook_最大(小)元素及优先堆栈201

Python3_Cookbook_最大(小)元素及优先堆栈201

作者: 凤舞琦天 | 来源:发表于2018-09-08 16:09 被阅读0次

找出最大或最小的N个元素##堆堆

import heapq
nums = [1,8,2,23,7,-4,19,23,42,37,2]

print (heapq.nlargest(3,nums))##最大的三个数,

print (heapq.nsmallest(2,nums))##最小的两个数

这两个函数都可以接受一个参数哦key

portfolio = [
{'name':'IBM','shares':100,'price':91.1},
{'name':'APPL','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=lambda s: s['price'])

print ("cheap:\n",cheap)

expensive = heapq.nlargest(3,portfolio,key=lambda s: s['price'])

print ("expensive :\n",expensive)

heap = list(nums)
heapq.heapify(heap)
heapq.heappop(heap)###找最小值

实现优先队列###

import heapq
class PriorityQueue:
def init(self):
self._queue = []
self._index = 0

def push(self, item, priority):
    heapq.heappush(self._queue, (-priority, self._index, item))
    self._index += 1

def pop(self):
    return heapq.heappop(self._queue)[-1]

实例##

class Item :
def init(self,name):
self.name = name
def repr(self) :
return 'Item({!r})'.format(self.name)
""""
example = Item('foo')
print ("Class ,Item:\n",example.repr())###Priori see object of Item####
"""
q = PriorityQueue()
q.push(Item('foo'),1)
q.push(Item('bar'),5)
q.push(Item('spam'),4)
q.push(Item('grok'),1)
print ("all:",q._queue)#all: [(-5, 1, Item('bar')), (-1, 0, Item('foo')), (-4, 2, Item('spam')), (-1, 3, Item('grok'))]
print (q.pop())###bar
print (q.pop())###spam
print (q.pop())##foo
print (q.pop())###grok##

print ("q._queue::::\n",q._queue)

拓展阅读:

请参看:
https://www.cnblogs.com/Joyce-song94/p/7149440.html

相关文章

  • Python3_Cookbook_最大(小)元素及优先堆栈201

    找出最大或最小的N个元素##堆堆 import heapqnums = [1,8,2,23,7,-4,19,23,...

  • 实现一个优先队列

    实现一个优先队列 实现一个优先队列,队列需要添加元素,删除元素,获得最大(小)元素等方法。要实现这样的一个队列,至...

  • 数据结构小结

    堆Heap 定义优先队列(Priority Queue): 取出元素的大小是根据元素的优先权(关键字)大小最大堆(...

  • iOS 数据结构之有界优先级队列

    有界优先级队列 是一个有元素最大限制的优先级队列。如果一个新的元素插入到有界优先级队列中,但是容量已经最大了,那么...

  • 2.4 优先队列 Priority Queue

    优先队列的数据结构支持两种操作:删除最大元素和插入元素优先队列的使用和队列(删除最老的元素)以及栈(删除最新的元素...

  • Swift 5.3 —— 优先级队列 Priority Queu

    优先级队列 一个优先级队列一般分为两种形式,最大优先级队列,在前面的元素优先级最高,最小优先级队列,在前面的元素优...

  • 数据结构和算法(三) - 栈

    堆栈数据结构在概念上与物理的堆栈相同。将元素添加到堆栈时,将其放在堆栈顶部。从堆栈中删除元素时,始终会删除最顶层的...

  • PriorityQueue

    简介 优先级队列,是0个或多个元素的集合,集合中的每个元素都有一个权重值,每次出队都弹出优先级最大或最小的元素。 ...

  • 《算法》-排序[优先队列(堆排序)]

    优先队列(堆排序) 优先队列:最重要的操作就是删除最大元素和插入元素 堆排序:堆排序对于记录较少的文件效果一般,对...

  • Swift数据结构:堆栈(stack)

    堆栈就像一个功能有限的数组,你只能将新元素添加(push)到堆栈顶部,从堆栈顶部删除(pop)元素,也可以只查看而...

网友评论

      本文标题:Python3_Cookbook_最大(小)元素及优先堆栈201

      本文链接:https://www.haomeiwen.com/subject/vxflgftx.html