import time

def timing(f, n, a):
    print f.__name__,
    r = range(n)
    t1 = time.clock()
    for i in r:
	f(a); f(a); f(a); f(a); f(a); f(a); f(a); f(a); f(a); f(a)
    t2 = time.clock()
    print round(t2-t1, 3)

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()

testdata = range(256)
print `testdata`
testfuncs = f1, f2, f3, f4, f5, f6, f7
for f in testfuncs: print f.func_name, f(testdata)
for f in testfuncs: timing(f, 100, testdata)