[Python-Dev] iter.index()

Christian Stork python-dev-list at cstork.org
Sun Apr 18 22:21:07 EDT 2004


On Sun, Apr 18, 2004 at 10:08:25PM -0400, Bob Ippolito wrote:
> 
> On Apr 18, 2004, at 9:53 PM, Christian Stork wrote:
> 
> >Hi,
> >
> >I wanted to do something like
> >
> >    i = itertools.chain(list1, list2).index(elem)
> >
> >but that gave me
> >
> >    ...
> >    AttributeError: 'itertools.chain' object has no attribute 'index'
> >
> >If I use the operator module it works just fine.
> >
> >    i = operator.indexOf(itertools.chain(list1, list2), elem)
> >
> >Why not add the index method to iterator objects?  Of course, 
> >internally
> >only next() is used by the default implementation.
> 
> An iterator mutates each time you call its next().  Your call to 
> indexOf does one of three things: exhaust some of your iterator and 
> return a useless integer, 

Why useless?  It returns the index.  Why do I have to build a new
concatinated list (or my own special index function) in order to get
that information?

> exhaust all of your iterator and raise an exception, 

Yep, just as it would for lists.

> or never return.

Well, that's the risk we take with iterators, but in my case I'm certain
of two sufficient termination criteria: the iterator is finite and I
know that elem is in it.

> If you want an object that acts like a list, you should use a list.

I don't see anything inherently "listy" about index().  It just counts
how many elements there are to reach elem.  And obviously the
functionality is already there in the operator module.  I'm just
proposing a little convenience.

-- 
Chris Stork   <>  Support eff.org!  <>   http://www.ics.uci.edu/~cstork/
OpenPGP fingerprint:  B08B 602C C806 C492 D069  021E 41F3 8C8D 50F9 CA2F



More information about the Python-Dev mailing list