[Python-Dev] Retrieve an arbitrary element from a set without removing it
steve at pearwood.info
Sat Oct 24 00:46:48 CEST 2009
On Sat, 24 Oct 2009 06:04:12 am Terry Reedy wrote:
> John Arbash Meinel wrote:
> > So 'for x in s: break' is about 2x faster than next(iter(s)) and 3x
> > faster than (iter(s).next()).
> > I was pretty surprised that it was 30% faster than "for x in s:
> > pass". I assume it has something to do with a potential "else:"
> > statement?
> for x in s: pass
> iterates through *all* the elements in s and leaves x bound to the
> arbritrary *last* one instead of the arbitrary *first* one. For a
> large set, this would be a lot slower, not just a little.
> fwiw, I think the use case for this is sufficiently rare that it does
> not need a separate method just for this purpose.
And yet it keeps coming up, again and again... obviously people using
sets in code think it has a use-case.
I did ask earlier for a use-case, and the OP hasn't replied, but Vitor
Bosshard did point out one of his use-cases: he had the difference
between two frozensets, which he knew had only one element, but due to
the lack of pop() he had no straightforward way of finding out what
that element was.
The lack of get() in sets and frozensets is sounding more and more to me
like the victory of purity over practicality.
More information about the Python-Dev