[Python-ideas] random.choice on non-sequence
Tim Peters
tim.peters at gmail.com
Tue Apr 12 22:07:43 EDT 2016
[Greg Ewing]
> Maybe sets should have a method that returns an indexable
> view? The order could be defined as equivalent to iteration
> order, and it would allow things like random.choice to
> work efficiently on sets.
Well, sets and dicts are implemented very similarly in CPython. Note
that a dict view (whether of keys, values or items) doesn't support
indexing! It's unclear how that could be added efficiently, and the
same applies to sets. Iteration works pretty efficiently, because a
hidden "search finger" is maintained internally, skipping over the
gaps in the hash table as needed (so iteration can, internally, make a
number of probes equal to the number of hash slots, and no more than
that) - but that's no help for indexing by a random integer.
I'll just add that I've never had a real need for a random selection
from a set. For all the many set algorithms I've coded, an
"arbitrary" element worked just as well as a "random" element, and
set.pop() works fine for that.
More information about the Python-ideas
mailing list