#!/usr/bin/env python
import timeit, random, time, sys, itertools
rand = random.Random(time.time())
randint = lambda: rand.randint(1, 100)
oldlist = [randint() for x in range(1, 100)]
def oldway():
mylist = []
for item in oldlist:
if item < 50:
mylist.append(item)
return mylist
def cmp(x): return x < 50
def functional():
return filter(cmp, oldlist)
def iter_():
return list(itertools.ifilter(cmp, oldlist))
def newway():
return [item for item in oldlist if item < 50]
ow = oldway()
fn = functional()
it = iter_()
nw = newway()
if not ow == fn == nw == it:
print "Sanity check failed! Lists are not the same"
sys.exit(-1)
ot = timeit.Timer('oldway()', 'from __main__ import oldway')
fn = timeit.Timer('functional()', 'from __main__ import functional')
nw = timeit.Timer('newway()', 'from __main__ import newway')
it = timeit.Timer('iter_()', 'from __main__ import iter_')
print "running oldway() 100000 times ...",
sys.stdout.flush()
print ot.timeit(100000)
print "running functional() 100000 times ...",
sys.stdout.flush()
print fn.timeit(100000)
print "running itertools way (iter_) 100000 times ...",
sys.stdout.flush()
print it.timeit(100000)
print "running newway() 100000 times ...",
sys.stdout.flush
print nw.timeit(100000)