Fredrik Lundh <[EMAIL PROTECTED]> wrote: ... > the obvious solution is > > item = list(s)[0] > > but that seems to be nearly twice as slow as [x for x in s][0] > under 2.4. hmm.
Funny, and true on my laptop too: helen:~ alex$ python -mtimeit -s's=set([23])' 'x=list(s)[0]' 100000 loops, best of 3: 2.55 usec per loop helen:~ alex$ python -mtimeit -s's=set([23])' 'x=[x for x in s][0]' 100000 loops, best of 3: 1.48 usec per loop helen:~ alex$ python -mtimeit -s's=set([23])' '[x for x in s]' 1000000 loops, best of 3: 1.36 usec per loop Exploiting the design defect whereby a LC leaves variables bound can shave another few percents off it, as shown. > here's a faster variant: > > item = iter(s).next() Not all that fast here: helen:~ alex$ python -mtimeit -s's=set([23])' 'x=iter(s).next()' 100000 loops, best of 3: 1.71 usec per loop > but at least on my machine, your two-step solution > > item = s.pop(); s.add(item) > seems to be even faster. Not really, here: helen:~ alex$ python -mtimeit -s's=set([23])' 'x=s.pop();s.add(x)' 100000 loops, best of 3: 1.49 usec per loop No joy from several variations on transform-and-pop: helen:~ alex$ python -mtimeit -s's=set([23])' 'x=set(s).pop()' 100000 loops, best of 3: 2.21 usec per loop helen:~ alex$ python -mtimeit -s's=set([23])' 'x=list(s).pop()' 100000 loops, best of 3: 3.2 usec per loop helen:~ alex$ python -mtimeit -s's=set([23])' 'x=tuple(s)[0]' 100000 loops, best of 3: 1.79 usec per loop Fastest I've found is unpacking-assignment: helen:~ alex$ python -mtimeit -s's=set([23])' 'x,=s' 1000000 loops, best of 3: 0.664 usec per loop Alex -- http://mail.python.org/mailman/listinfo/python-list