Welcome, guest | Sign In | My Account | Store | Cart
def list2range(lst):
    '''make iterator of ranges of contiguous numbers from a list of integers'''

    tmplst = lst[:]
    tmplst.sort()
    start = tmplst[0]

    currentrange = [start, start + 1]

    for item in tmplst[1:]:
        if currentrange[1] == item:
            # contiguous
            currentrange[1] += 1
        else:
            # new range start
            yield tuple(currentrange)
            currentrange = [item, item + 1]

    # last range
    yield tuple(currentrange)



if __name__ == '__main__':
    # test routine
    a = [1,2,3,4,5,6,7,8,10,11,12,23,24,25,26]
    b = [(1,9), (10,13), (23, 27)]
    c = list(list2range(a))

    if b != c:
        print 'failed!'
    else:
        print 'succeed!'
    print c

History