Robin Becker wrote:

> eg for
> >>> e = enumerate([0,1,2,3,4,5])
> >>> for i,a in e:
> ...         if a==3: break
> ...
> >>> for i,a in e:
> ...         print i,a
> ...
> 4 4
> 5 5
> >>>
> 
> I think the second loop needs to start at 3 ie the split needs to be
> start, limit semantics
> 
> It would be nice to be able to fix it with a move back method.

I have to reread your previous post, it seems. Meanwhile:

>>> e = enumerate(range(6))
>>> for i, a in e:
...     if a == 3:
...             for i, a in itertools.chain([(i, a)], e):
...                     print i, a
...             break
...
3 3
4 4
5 5

Nesting the loops is necessary to handle empty lists and lists with no
matching item correctly. Alternatively, you could set a 'found' flag.

Another option:

>>> def predicate((i, a)): return a != 3
...
>>> for i, a in itertools.dropwhile(predicate, enumerate(range(6))):
...     print i, a
...
3 3
4 4
5 5

The extra function call might have a negative impact on performance, though.

Peter

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to