[ create a new paste ] login | about

Link: http://codepad.org/Di6Z3POC    [ raw code | output | fork ]

Python, pasted on Jan 25:
def nblocks(seq, block_len):
    '''
    Divide the sequence "seq" to blocks of "block_len" size.
    Makes the last block big enough to hold the remainder.

    nblocks(range(10), 3) ->
    [[0, 1, 2], [3, 4, 5], [6, 7, 8, 9]]
    '''
    # skip the last 2 blocks if len(seq) doesn't div perfectly.
    # if len(seq) does div perfectly - skip only 1
    for i in range(0, len(seq) - 2 * block_len + 1, block_len):
        yield seq[i:i + block_len]

    # yield the last 1-2 blocks connected
    if len(seq) > block_len:
        yield seq[i + block_len:]



print list(nblocks(range(9), 3))
print list(nblocks(range(10), 3))
print list(nblocks(range(11), 3))
print list(nblocks(range(12), 3))
print list(nblocks(range(13), 3))
print '---'
print list(nblocks(range(10), 2))
print list(nblocks(range(10), 4))


Output:
1
2
3
4
5
6
7
8
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
[[0, 1, 2], [3, 4, 5], [6, 7, 8, 9]]
[[0, 1, 2], [3, 4, 5], [6, 7, 8, 9, 10]]
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11, 12]]
---
[[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]
[[0, 1, 2, 3], [4, 5, 6, 7, 8, 9]]


Create a new paste based on this one


Comments: