What Would You Use The Heapq Python Module For In Real Life?
Solution 1:
The heapq module is commonly use to implement priority queues.
You see priority queues in event schedulers that are constantly adding new events and need to use a heap to efficiently locate the next scheduled event. Some examples include:
- Python's own sched module: http://hg.python.org/cpython/file/2.7/Lib/sched.py#l106
- The Tornado web server: https://github.com/facebook/tornado/blob/master/tornado/ioloop.py#L260
- Twisted internet servers: http://twistedmatrix.com/trac/browser/trunk/twisted/internet/base.py#L712
The heapq docs include priority queue implementation notes which address the common use cases.
In addition, heaps are great for implementing partial sorts. For example, heapq.nsmallest and heapq.nlargest can be much more memory efficient and do many fewer comparisons than a full sort followed by a slice:
>>>from heapq import nlargest>>>from random import random>>>nlargest(5, (random() for i in xrange(1000000)))
[0.9999995650034837, 0.9999985756262746, 0.9999971934450994, 0.9999960394998497, 0.9999949126363714]
Solution 2:
This was an accidental discovery of me by trying to see how could I implement the Counter Module in Python 2.6. Just have a look into the implementation and usage of collections.Counter. This is actually implemented through heapq.
Post a Comment for "What Would You Use The Heapq Python Module For In Real Life?"