Maybe, that suffices: https://pypi.python.org/pypi/xheap


On 21.11.2017 03:46, bunslow wrote:
Perhaps such repetition is a sign that *something* needs to be done...

Thanks for the link though. I'm new enough to the community that it didn't even occur to me to search for prior discussions.

On Mon, Nov 20, 2017 at 8:38 PM, Sebastian Kreft <skr...@gmail.com <mailto:skr...@gmail.com>> wrote:

    This has been brought up multiple times. Last time was on this
    thread
    https://mail.python.org/pipermail/python-ideas/2016-October/043024.html
    <https://mail.python.org/pipermail/python-ideas/2016-October/043024.html>.

    On Tue, Nov 21, 2017 at 3:13 AM, bunslow <buns...@gmail.com
    <mailto:buns...@gmail.com>> wrote:

        Nothing so bombastic this time. The heapq functions are
        basically all named "heapsomething", and basically all take a
        "heap" for their first argument, with supplementary args
        coming after. It's a textbook example of the (hypothetical)
        Object Oriented Manifesto™ where defining a class increases
        type safety and programmers' conceptual clarity. There're
        practically no drawbacks, and the code to be added would be
        very simple. Updating the tests and docs would probably be
        harder.

        In pure Python, such a class would look like this:

        class Heap(list):

            def __init__(self, iterable=None):
                if iterable:
                    super().__init__(iterable)
                else:
                    super().__init__()

                self.heapify()

            push = heapq.heappush
            pop = heapq.heappop
            pushpop = heapq.heappushpop
            replace = heapq.heapreplace
            heapify = heapq.heapify

            # This could be a simple wrapper as well, but I had the
        following thoughts anyways, so here they are
            def nsmallest(self, n, key=None):
                # heapq.nsmallest makes a *max* heap of the first n
        elements,
                # while we know that self is already a min heap, so we can
                # make the max heap construction faster
                self[:n] = reversed(self[:n])
                return heapq.nsmallest(n, self, key)

            # do we define nlargest on a minheap??


        Wrapping around the C builtin functions (which aren't
        descriptors) would be a bit harder, but not much so:

        from functools import partial

        class Heap(list):
            def __init__(self, iterable=None):
                if iterable:
                    super().__init__(iterable)
                else:
                    super().__init__()

                self.heapify = partial(heapq.heapify, self)
                self.push = partial(heapq.heappush, self)
                ...

                self.heapify()


        Thoughts?

        _______________________________________________
        Python-ideas mailing list
        Python-ideas@python.org <mailto:Python-ideas@python.org>
        https://mail.python.org/mailman/listinfo/python-ideas
        <https://mail.python.org/mailman/listinfo/python-ideas>
        Code of Conduct: http://python.org/psf/codeofconduct/
        <http://python.org/psf/codeofconduct/>




-- Sebastian Kreft




_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to