Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@sekimura
Created November 3, 2010 00:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sekimura/660557 to your computer and use it in GitHub Desktop.
Save sekimura/660557 to your computer and use it in GitHub Desktop.
def f1(list):
string = ""
for item in list:
string = string + chr(item)
return string
def f2(list):
return reduce(lambda string, item: string + chr(item), list, "")
def f3(list):
string = ""
for character in map(chr, list):
string = string + character
return string
def f4(list):
string = ""
lchr = chr
for item in list:
string = string + lchr(item)
return string
def f5(list):
string = ""
for i in range(0, 256, 16): # 0, 16, 32, 48, 64, ...
s = ""
for character in map(chr, list[i:i+16]):
s = s + character
string = string + s
return string
import string
def f6(list):
return string.joinfields(map(chr, list), "")
import array
def f7(list):
return array.array('B', list).tostring()
from struct import pack
def f8(list):
return pack('%dB' % len(list), *list)
def cmpthese(n=0, functions=None):
results = {}
for func_name in functions:
args = ['%s(range(256))' % func_name, 'from __main__ import %s' % func_name]
t = Timer(*args)
results[func_name] = 1 / (t.timeit(number=n) / n) # passes/sec
functions_sorted = sorted(functions, key=results.__getitem__)
for f in functions_sorted:
diff = []
for func in functions_sorted:
if func == f:
diff.append(" --")
else:
diff.append("%5.0f%%" % (results[f]/results[func]*100 - 100))
diffs = " ".join(diff)
print "%s\t%6d/s %s" % (f, results[f], diffs)
if __name__=='__main__':
from timeit import Timer
cmpthese(1000, 'f1 f2 f3 f4 f5 f6 f7 f8'.split(" "))
@sekimura
Copy link
Author

sekimura commented Nov 3, 2010

f2    9921/s     --   -27%   -44%   -46%   -47%   -63%   -81%   -90%
f5   13654/s    38%     --   -23%   -25%   -27%   -49%   -74%   -86%
f1   17682/s    78%    29%     --    -3%    -5%   -34%   -67%   -82%
f4   18261/s    84%    34%     3%     --    -2%   -32%   -66%   -82%
f3   18643/s    88%    37%     5%     2%     --   -30%   -65%   -81%
f6   26791/s   170%    96%    52%    47%    44%     --   -50%   -73%
f7   53535/s   440%   292%   203%   193%   187%   100%     --   -46%
f8   98992/s   898%   625%   460%   442%   431%   269%    85%     --

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment