Welcome, guest | Sign In | My Account | Store | Cart

Split up a sequence in same-size(if possible) parts.

Python, 6 lines
1
2
3
4
5
6
# Guyon Morée
# http://gumuz.looze.net/

def split_seq(seq,size):
    """ Split up seq in pieces of size """
    return [seq[i:i+size] for i in range(0, len(seq), size)]

As discussed on: http://gumuz.looze.net/wordpress/index.php/archives/2005/04/20/python-chopping-up-a-sequence/

It's very straight forward:

>>> lst = [1,2,3,4,5,6,7,8,9,10]
>>> split_seq(lst,2)
[[1, 2], [3, 4], [5, 6], [7, 8], [9,10]]

It takes a list, re-groups them in another list, 2 items per group. The source list doesn't have to be evenly dividable though:

>>> lst = [1,2,3,4,5,6,7,8,9,10]
>>> split_seq(lst,3)
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

Of course, a string is a sequence too. That's what I used it for last time. I had a string of bits, which I needed to divide in pieces of 8, bytes:

>>> bits = '101011101001011010010110'
>>> split_seq(bits,8)
['10101110', '10010110', '10010110']

4 comments

Nick Matsakis 18 years, 10 months ago  # | flag

One issue with this recipe is that you wind up with a list at the end that could be much shorter than what you have. Consider this alternative:

def split_seq(seq, size):
    newseq = []
    splitsize = 1.0/size*len(seq)
    for i in range(size):
        newseq.append(seq[int(round(i*splitsize)):int(round((i+1)*splitsize))])
    return newseq

This produces the following results, which may be preferred for some applications:

>>> split_seq([1,2,3,4,5,6,7,8,9,10], 3)
[[1, 2, 3], [4, 5, 6, 7], [8, 9, 10]]
Guyon Morée (author) 18 years, 10 months ago  # | flag

very useful as well. Thanx Nick, that's a cool one as well. Do you want me to add your version to the recipe or are you going to add this as a recipe as well?

Cheers, Guyon Morée http://gumuz.looze.net/

Nick Matsakis 18 years, 10 months ago  # | flag

I just submitted it as a separate recipe, though I'm not sure I like it so much. I wonder if it could be done using only integer math.

Created by Guyon Morée on Tue, 7 Jun 2005 (PSF)
Python recipes (4591)
Guyon Morée's recipes (3)

Required Modules

  • (none specified)

Other Information and Tasks