Chunking sequential values in a list

David Hirschfield davidh at ilm.com
Thu Jul 13 15:24:39 EDT 2006


I have this function:

def sequentialChunks(l, stride=1):
    chunks = []
    chunk = []
    for i,v in enumerate(l[:-1]):
        v2 = l[i+1]
        if v2-v == stride:
            if not chunk:
                chunk.append(v)
            chunk.append(v2)
        else:
            if not chunk:
                chunk.append(v)
            chunks.append(chunk)
            chunk = []
    if chunk:
        chunks.append(chunk)
    return chunks

Which takes a list of numerical values "l" and splits it into chunks 
where each chunk is sequential, where sequential means each value in a 
chunk is
separated from the next by "stride".

So sequentialChunks([1,2,3,5,6,8,12]) returns:

[[1,2,3],[5,6],[8],[12]]

I don't think the code above is the most efficient way to do this, but 
it is relatively clear. I tried fiddling with list-comprehension ways of 
accomplishing it, but kept losing track of things...so if anyone has a 
suggestion, I'd appreciate it.

Thanks,
-Dave


-- 
Presenting:
mediocre nebula.




More information about the Python-list mailing list