Raymond Hettinger wrote:
From: "Guido van Rossum"
But doesn't the very same argument also apply against islice(), which you just offered as an alternative?
Not really. The use cases for islice() typically do not involve repeated slices of an iterator unless it is slicing off the front few elements on each pass. In contrast, getitem() is all about grabbing something other than the frontmost element and seems to be intended for repeated calls on the same iterator.
That wouldn't make sense as getitem() consumes the iterator! ;) But seriously: perhaps the name getitem() is misleading? What about item() or pickitem()?
And its support for negative indices seems somewhat weird in the context of general purpose iterators: getitem(genprimes(), -1).
This does indeed make as much sense as sum(itertools.count()).
I'll study Walter's use case but my instincts say that adding getitem() will do more harm than good.
Here's the function in use (somewhat invisibly, as it's used by the walknode() method). This gets the oldest news from Python's homepage:
from ll.xist import parsers, xfind from ll.xist.ns import html e = parsers.parseURL("http://www.python.org", tidy=True) print e.walknode(html.h2 & xfind.hasclass("news"))[-1] Google Adds Python Support to Google Calendar Developer's Guide
getitem((line for line in open("Lib/codecs.py") if
Get the first comment line from a python file: line.startswith("#")), 0) '### Registry and builtin stateless codec functions\n' Create a new unused identifier:
def candidates(base): ... yield base ... for suffix in count(2): ... yield "%s%d" % (base, suffix) ... usedids = set(("foo", "bar")) getitem((i for i in candidates("foo") if i not in usedids), 0) 'foo2'
Servus, Walter