On Mon, Jul 13, 2020 at 7:44 AM Guido van Rossum <gu...@python.org> wrote:

> I think you all should get together and come up with a good
> implementation,
>

+1

> and then petition Raymond Hettinger.

Is this Raymond's turf? I would think it belongs more in the random module
than itertools, or is that Raymond's responsibility as well?

In any case, a good implementation would be a lot easier to evaluate for
inclusion.

Or maybe there is an existing open source 3rd party project that has code
> you can copy? I don’t recall if random has a C accelerator, but if it does,
> you should come up with C code as well.
>

Or Cython— at least to prototype it.

-CHB



> —Guido
>
> On Mon, Jul 13, 2020 at 05:40 David Mertz <me...@gnosis.cx> wrote:
>
>> If we get this function (which I would like), the version with k items
>> (default 1) is much better. Some iterators cannot be repeated at all, so
>> not only is it slower to call multiple times if you need k>1, it's
>> impossible.
>>
>> On Mon, Jul 13, 2020, 8:37 AM David Mertz <me...@gnosis.cx> wrote:
>>
>>> This is an inefficient reservoir sampling. The optimized version does
>>> not need to call a random inclusion switch on every element, but can skip a
>>> geometrically ordered collection of (random) skip lengths to avoid most
>>> random inclusion decisions.
>>>
>>> Obviously, all items must be iterated over no matter what, but if
>>> randrange() is significant compared to the cost of next(), the
>>> skip-then-decide version is much preferred, especially as size grows.
>>>
>>> On Mon, Jul 13, 2020, 7:53 AM Oscar Benjamin <oscar.j.benja...@gmail.com>
>>> wrote:
>>>
>>>> I posted this in the thread about indexing dict items but it seems to
>>>> have been buried there so I'm starting a new thread.
>>>>
>>>> Maybe there could be a function in the random module for making a
>>>> random choice from an arbitrary (finite) iterable. This implementation
>>>> can choose a random element from an iterable by fully iterating over
>>>> it so is O(N) in terms of CPU operations but O(1) for memory usage:
>>>
>>> [,,,]
>
>>
>>>> --
> --Guido (mobile)
> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org
> To unsubscribe send an email to python-ideas-le...@python.org
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-ideas@python.org/message/DZ7KQZM5EQO4YIN3A3RW6BAKOP2CXWP3/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/QSBF5D3ET3Y43AAGMDZWAKFAZK7WHTGP/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to