how to split a string (or sequence) into pairs of characters?

Jason R. Coombs jaraco at
Thu Aug 15 19:41:42 CEST 2002

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.


More information about the Python-list mailing list