[Python-Dev] Retrieve an arbitrary element from a set withoutremoving it (original) (raw)
Guido van Rossum guido at python.org
Tue Nov 3 19:56:44 CET 2009
- Previous message: [Python-Dev] Retrieve an arbitrary element from a set withoutremoving it
- Next message: [Python-Dev] Retrieve an arbitrary element from a set withoutremoving it
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Tue, Nov 3, 2009 at 12:20 AM, Yuvgoog Greenle <ubershmekel at gmail.com> wrote:
On Tue, Nov 3, 2009 at 12:19 AM, Greg Ewing <greg.ewing at canterbury.ac.nz> wrote:
Cameron Simpson wrote:
Personally, I'm for the iteration spec in a lot of ways.
Firstly, a .get()/.pick() that always returns the same element feels horrible. Is there anyone here who likes it? State might cause people to use this to iterate which would be just plain wrong. The 2 things I have a bad feeling about is: 1. random.choice could be a pythonic alternative to what some have mentioned here but it doesn't work on sets. The following code raises TypeError: 'set' object does not support indexing: import random random.choice(set([1,2,3,4,5,6]))
There is a huge difference between picking a random element of a set and picking an arbitrary one. Algorithms that need randomness must use the random generator (and because the hash table implementation doesn't provide O(1) access they will have to use a list first). Algorithms that don't need randomness should not be forced to pay for the (considerable!) cost of calling the random number generator, and must accept that the element selected may be predictable.
this is kinda ironic: http://en.wikipedia.org/wiki/Axiomofchoice
Also irrelevant. That Axiom is only interesting for infinite sets, which Python does not support (at least not using the set builtin -- you can of course write your own symbolic algebra package in Python that can be used to represent certain infinite sets, though you still won't be able to iterate over all of their elements :-).
2. If I store objects in a set and modify their attributes I have no O(1) way of getting the objects back if I stumble upon an equivalent object. In cases like that I'd have to either iterate over the set or use a dict with key == value. I have a feeling the "get" or "peek" api could cater to this need. A use case for this could be an implementation of a cookie jar with a set of cookies where equivalence is defined by the name and domain.
Sets are what they are. If they don't fit your requirements, don't use them. Don't get fooled by the name -- a dict also isn't a very good data structure to implement an actual Chinese-English dictionary, for example. :-)
-- --Guido van Rossum (python.org/~guido)
- Previous message: [Python-Dev] Retrieve an arbitrary element from a set withoutremoving it
- Next message: [Python-Dev] Retrieve an arbitrary element from a set withoutremoving it
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]