[Python-Dev] itertools addition: getitem()
Kevin Jacobs <firstname.lastname@example.org>
bioinformed at gmail.com
Sun Jul 8 17:49:59 CEST 2007
On 7/8/07, Guido van Rossum <guido at python.org> wrote:
> Ahem. I hope you have a better use case for getitem() than that
> (regardless of the default issue). I find it clearer to write that as
> compid = root[ns.company_id].next()
> except StopIteration:
> compid = None
> compid = int(compid)
> While this is more lines, it doesn't require one to know about
> getitem() on an iterator. This is the same reason why setdefault() was
> a mistake -- it's too obscure to invent a compact spelling for it
> since the compact spelling has to be learned or looked up.
Apropos of this discussion, I've occasionally wanted a faster version of the
Return the n'th next element for seq, if it exists.
If default is specified, it is return when the sequence is too short.
Otherwise StopIteration is raised.
for i in xrange(n-1):
if default is _nothing:
The nice thing about this function is that it solves several problems in
one: extraction of the n'th next element, testing for a minimum sequence
length given a sentinel value, and just skipping n elements. It also leaves
the sequence in a useful and predictable state, which is not true of the
Python-version getitem code. While cute, I can't say if it is worthy of
being an itertool function.
Also vaguely apropos:
'Return the length of the hopefully finite sequence'
n = 0
for x in seq:
n += 1
Why? Because I find myself implementing it in virtually every project.
Maybe I'm just an outlier, but many algorithms I implement need to consume
iterators (for side-effects, obviously) and it is sometimes nice to know
exactly how many elements were consumed.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Python-Dev