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

The code below takes a string and returns a list containing the n-sized pieces of the string. For example: splitCount('aabbccdd', 2) => ['aa', 'bb', 'cc', 'dd']

Python, 2 lines
 1 2 def splitCount(s, count): return [''.join(x) for x in zip(*[list(s[z::count]) for z in range(count)])]

This is useful if you know that data is in a certain format. I use it to parse dates that are not delimited like: 060506 (often found in filenames, etc).

Anyways it seems like kind of a basic operation on strings.

It seems like there should be a more pythonic way to do this, but I can't think of one.

Ian Bicking 15 years, 5 months ago

For sequences... I think this might be better, and works for any sequences that support slicing and len() (thus including lists):

def split_len(seq, length):
return [seq[i:i+length] for i in range(0, len(seq), length)]
Marco Ippolito 7 years, 12 months ago

Ian, they are not equivalent:

1)

seq='f09f9989x'; length=2; [seq[i:i+length] for i in range(0, len(seq), length)]
['f0', '9f', '99', '89', 'x']

== Vs ==

2)

seq='f09f9989x'; length=2; [''.join(x) for x in zip(*[list(seq[z::length]) for z in range(length)])]
['f0', '9f', '99', '89']

(notice the difference in results)

Or, similarly:

seq='f09f9989x'; length=2; map(''.join, zip(*[iter(seq)]*length))
['f0', '9f', '99', '89']
 Created by Matt Wallace on Tue, 6 Jun 2006 (PSF)

### Tags

▶ Show machine tags (4)

### Required Modules

• (none specified)