Advertisement
Guest User

string concat speed tests

a guest
Oct 1st, 2015
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.32 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. ''' Speed tests of string concatenation with `+` vs `str.join()`
  4.  
  5.    Written by PM 2Ring 2015.10.01
  6. '''
  7.  
  8. from __future__ import print_function
  9.  
  10. import sys
  11. from timeit import Timer
  12.  
  13. def concat_plus(lst):
  14.     s = ''
  15.     for u in lst:
  16.         s += u
  17.     return s
  18.  
  19. def concat_plus_i(lst):
  20.     s = ''
  21.     for i in range(len(lst)):
  22.         s += lst[i]
  23.     return s
  24.  
  25. def concat_join(lst):
  26.     s = []
  27.     for u in lst:
  28.         s.append(u)
  29.     return ''.join(s)
  30.  
  31. def concat_join_i(lst):
  32.     s = []
  33.     for i in range(len(lst)):
  34.         s.append(lst[i])
  35.     return ''.join(s)
  36.  
  37. def concat_join_lc(lst):
  38.     return ''.join([u for u in lst])
  39.  
  40. def concat_join_list(lst):
  41.     return ''.join(lst)
  42.  
  43. funcs = (
  44.     concat_join_i,
  45.     concat_join,
  46.     concat_plus_i,
  47.     concat_plus,
  48.     concat_join_lc,
  49.     concat_join_list,
  50. )
  51.  
  52. def verify(lst):
  53.     print('Verifying...')
  54.  
  55.     results = []
  56.     for func in funcs:
  57.         fname = func.func_name
  58.         print('%s' % fname)
  59.         s = func(lst)
  60.         #print(s)
  61.         results.append(s)
  62.  
  63.     s = results[0]
  64.     if all(s==u for u in results):
  65.         print('\nAll strings are equal\n')
  66.     else:
  67.         print('\nString mismatch error! Aborting.')
  68.         exit()
  69.  
  70. def time_test(loops, reps):
  71.     ''' Print timing stats for all the functions '''
  72.     for func in funcs:
  73.         fname = func.func_name
  74.         print('\n%s' % fname)
  75.         setup = 'from __main__ import lst, ' + fname
  76.         cmd = fname + '(lst)'
  77.         t = Timer(cmd, setup)
  78.         r = t.repeat(reps, loops)
  79.         r.sort()
  80.         print(r)
  81.  
  82.  
  83. if __name__ == "__main__":
  84.     lo = int(sys.argv[1]) if len(sys.argv) > 1 else 2
  85.     step = int(sys.argv[2]) if len(sys.argv) > 2 else 1
  86.     base = sys.argv[3] if len(sys.argv) > 3 else 'abc'
  87.     mult = int(sys.argv[4]) if len(sys.argv) > 4 else 1
  88.  
  89.     hi = lo + 5*step
  90.     print('High string count = %d' % hi)
  91.  
  92.     base *= mult
  93.     print('Base string length = %d' % len(base))
  94.  
  95.     all_strings = [base + str(i) for i in xrange(hi)]
  96.  
  97.     verify(all_strings)
  98.  
  99.     loops, reps = 100, 5
  100.     print('Timing tests\nLoops = %d, Repetitions = %d' % (loops, reps))
  101.  
  102.     for i in xrange(lo, hi + step, step):
  103.         lst = all_strings[:i]
  104.         print('\n*** %2d strings ***' % i)
  105.         time_test(loops, reps)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement