Peter Otten wrote:

> This is not as efficient as it should be -- the gaps are calculated twice,
> the check for the first and the last position is repeated on every
> iteration lots of packing and unpacking... -- 

To address some of my own criticism:

def lonely(triple):
    left, value, right = triple
    return left and right

def grouped(values):
    a, b, mid = tee(values, 3)
    gaps = (y - x != 1 for x, y in zip(a, islice(b, 1, None)))
    left, right = tee(gaps)

    triples = zip(
        chain([True], left),
        chain(right, [True])
    for key, group in groupby(triples, lonely):
        yield key, (value for left, value, right in group)

> either groupby() is the
> wrong tool or I'm holding it wrong ;)

Most certainly still true. 


Reply via email to