[Python-Dev] heapq, min and max

Antoine Pitrou solipsis at pitrou.net
Wed Oct 22 16:05:41 CEST 2008


Kristján Valur Jónsson <kristjan <at> ccpgames.com> writes:
> timeit.Timer("(l.sort(), l[-1])",
> s).timeit(1000)
> 
> 0.29406761513791935

This is clearly wrong. l.sort() will sort the list in place when it is first
invoked, and therefore will be very fast in subsequent calls.

Compare with:

    timeit.Timer("sorted(l)[-1]", s).timeit(1000)

which really does what you are looking for (sorting then taking the max *on
every iteration*), and is much slower.

As for heapq, its critical parts are already implemented in C as of Python 2.5.2:

>>> import heapq, _heapq
>>> _heapq
<module '_heapq' from '/usr/lib/python2.5/lib-dynload/_heapq.so'>
>>> heapq.heapify is _heapq.heapify
True





More information about the Python-Dev mailing list