Toolshed: types : XMaxHeap¶
Import XMaxHeap¶
from Naked.toolshed.types import XMaxHeap
Import XMaxHeap from C Module¶
from Naked.toolshed.c.types import XMaxHeap
The C module must be compiled before you import it. See the naked build documentation for more information.
Description¶
The XMaxHeap class is a max heap priority queue that extends Python heapq. This class supports sorting of new items that are pushed to the queue by assigned priority and pop of the highest priority item (in contrast to the Python built-in heapq which returns the lowest priority item). It also supports the addition of attribute metadata on instantiation of the class.
-
class
Naked.toolshed.types.XMaxHeap([attribute_dictionary])¶ Parameters: attribute_dictionary (dict) – (optional) a Python dictionary that is used to define the attributes of a new instance of a XMaxHeap. Key names are mapped to attribute names and their corresponding values are mapped to the attribute values.Function Overload
-
__len__()¶ Returns: (int) returns the number of items in the XMaxHeap. This allows you to uselen(XMaxHeap())to determine the number of items in the priority queue.
XMaxHeap Methods
-
length()¶ Returns: (int) returns the number of items in the XMaxHeap
-
pop()¶ Pops the highest priority item off of the queue.
Returns: (item type dependent) returns the highest priority item which is defined as the item that has the highest item_priorityvalue. If multiple items have the same value, they are returned on a first-in, first-out order (FIFO). If the queue is empty, returnsNone.
-
push(queue_item, item_priority)¶ Pushes an item to the queue with the priority defined
Parameters: - queue_item (any) – an object that is added to the priority queue.
- item_priority (int) – an integer that represents the priority of the item from 1 (min) to x (max). It is possible to assign the same priority level to multiple items in the queue.
-
pushpop(queue_item, item_priority)¶ Pushes an item to the queue and immediately pops and returns the highest priority item off of the queue.
Parameters: - queue_item (any) – an object that is added to the priority queue.
- item_priority (int) – an integer that represents the priority of the item from 1 (min) to x (max). It is possible to assign the same priority level to multiple items in the queue.
Returns: (item type dependent) returns the highest priority item which is defined as the item that has the highest
item_priorityvalue. If multiple items have the same value, they are returned on a first-in, first-out order (FIFO). If the item that is pushed to the queue is the highest priority item, it is immediately returned. If the queue is empty, returnsNone.
-
Examples¶
Create a New Instance of XMaxHeap, No Metadata
from Naked.toolshed.types import XMaxHeap
xmh = XMaxHeap()
Create a New Instance of XMaxHeap, With Metadata
from Naked.toolshed.types import XMaxHeap
xmh = XMaxHeap({'heapnumber': 1})
Access XMaxHeap Attribute Data
from Naked.toolshed.types import XMaxHeap
xmh = XMaxHeap({'heapnumber': 1})
print(xmh.heapnumber) # prints 1
Push Items on to the XMaxHeap
from Naked.toolshed.types import XMaxHeap
xmh = XMaxHeap({'heapnumber': 1})
xmh.push('eat eggs', 1)
xmh.push('eat spam', 2)
Pop Items off of the XMaxHeap by Priority
from Naked.toolshed.types import XMaxHeap
xmh = XMaxHeap({'heapnumber': 1})
xmh.push('eat eggs', 1)
xmh.push('eat spam', 2)
print(xmh.pop()) # prints 'eat spam'
print(xmh.pop()) # prints 'eat eggs'
Priority Tie Handling with XMaxHeap
from Naked.toolshed.types import XMaxHeap
xmh = XMaxHeap({'heapnumber': 1})
xmh.push('eat eggs', 1)
xmh.push('eat spam', 1) # same priority as above
print(xmh.pop()) # prints 'eat eggs' --> FIFO handling of ties
print(xmh.pop()) # prints 'eat spam'
Simultaneous Push and Pop with XMaxHeap
from Naked.toolshed.types import XMaxHeap
xmh = XMaxHeap({'heapnumber': 1})
xmh.push('eat eggs', 1)
xmh.push('eat spam', 2)
result = xmh.pushpop('buy Chris a coffee', 1)
print(result) # prints 'eat spam'
print(xmh.pop()) # prints 'eat eggs'
print(xmh.pop()) # prints 'buy Chris a coffee' ;)