how to split a string (or sequence) into pairs of characters?
b_mcerlean at yahoo.com
Fri Aug 16 18:30:29 CEST 2002
"Jason R. Coombs" <jaraco at spamblocker.sandia.gov> wrote in message news:<ajgp2v$67c$1 at sass2141.sandia.gov>...
> I have a segment of code that seems particularly ugly. I want to take a
> sequence and divide it into pairs such that pairs( 'aabbccdd' ) == (
> 'aa','bb','cc','dd' ). Here's code that does what I want.
> even = range( 0, len( s ), 2 )
> odd = range( 1, len( s ), 2 )
> even = map( s.__getitem__, even )
> odd = map( s.__getitem__, odd )
> pairs = map( operator.add, even, odd )
> I'd like it to be more elegant and more efficient, and I'd like to avoid
> using loops. I could obviously do:
> pairs = 
> for i in range( 0,len(s),2 ):
> pairs.append( s[i:i+2] )
> But even that seems a bit inefficient, and doesn't take advantages of the
> powerful sequence operations of Python.
> Can anyone come up with a better way of performing these operations? Extra
> kudos if it easily extends to any sublength and not just pairs.
I posted this earlier for a similar request:
def __init__(self, l, size):
self.l = l
def __getitem__(self, group):
idx = group * self.size
if idx > len(self.l):
raise IndexError("Out of range")
for pair in Group('aabbccddee',2):
# do something with pair.
This works with any sequence type (lists, tuples strings etc), lazy,
can be used for any size and should work on any python version from
More information about the Python-list