Would like some thoughts on a grouped iterator.

Steven D'Aprano steve+comp.lang.python at pearwood.info
Mon Sep 5 06:08:44 EDT 2016


On Monday 05 September 2016 18:46, Antoon Pardon wrote:

> I need an interator that takes an already existing iterator and
> divides it into subiterators of items belonging together.
> 
> For instance take the following class, wich would check whether
> the argument is greater or equal to the previous argument.


These sorts of filtering jobs are often so simple that its hardly worth 
generalising them unless you have a whole lot of them.


def group_increasing(seq):
    it = iter(seq)
    accum = []
    try:
        last = next(it)
    except StopIterator:
        return
    accum.append(last)
    for item in it:
        if item >= last:
            accum.append(item)
        else:
            yield tuple(accum)
            accum = [item]
        last = item
    if accum:
        yield tuple(accum)


If you do need to generalise, using itertools.groupby is probably the right way 
to do it.




-- 
Steve




More information about the Python-list mailing list