import timeit
from itertools import imap, izip

setup = [ '''
from itertools import imap, izip
f = lambda seq, size: map ( seq.__getitem__, imap ( slice, xrange ( 0, len(seq), size ), xrange ( size, len(seq), size ) ) )
''',
'''
from itertools import imap, izip
f = lambda seq, size: map ( ''.join, izip( *([iter(seq)]*size) ) )
''',
'''
f = lambda seq, size: [seq[i:i+size] for i in xrange(0, len(seq), size)]    # yuxio, range -> xrange
''',
'''
f = lambda seq, size: [seq[i:i+size] for i in range(0, len(seq), size)]     # yuxio
''' ]


stmt = lambda len_seq, size: 'g = f ( "{0}", {1} )'.format ( 'a'*len_seq, size )

for seq_len in [ 100, 1000, 10000 ]:
    for size in xrange ( 2, 10, 2 ):
        print map ( "{0:1.3f}".format, [ 100 * timeit.timeit ( stmt = stmt ( seq_len, size ), setup = _setup, number = 100000 / seq_len ) for _setup in setup ] )
    for size in xrange ( 20, 100, 20 ):
        print map ( "{0:1.3f}".format, [ 100 * timeit.timeit ( stmt = stmt ( seq_len, size ), setup = _setup, number = 100000 / seq_len ) for _setup in setup ] )

