When you have a set, known to be of length one, is there a "best" 
("most pythonic") way to retrieve that one item?

# given that I've got Python2.3.[45] on hand,
# hack the following two lines to get a "set" object
        >>> import sets
        >>> set = sets.Set

        >>> s = set(['test'])
        >>> len(s)
        1
        >>> s[0]
        Traceback (most recent call last):
          File "<stdin>", line 1, in ?
        TypeError: unindexable object

(which is kinda expected, given that it's unordered...an index 
doesn't make much sense)

To get the item, i had to resort to methods that feel less than 
the elegance I've come to expect from python:

        >>> item = [x for x in s][0]

or the more convoluted two-step

        >>> item = s.pop()
        >>> s.add(item)

or even worse, intruding into private members

        >>> item = s._data.keys()[0]

Is any of these more "pythonic" than the others?  Is there a more 
elegant 2.3.x solution?  If one upgrades to 2.4+, is there 
something even more elegant?  I suppose I was looking for 
something like

        >>> item = s.aslist()[0]

which feels a little more pythonic (IMHO).  Is one solution 
preferred for speed over others (as this is happening in a fairly 
deeply nested loop)?

Any tips, preferences, input, suggestions, pointers to obvious 
things I've missed, or the like?

Thanks,

-tkc







-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to