Python example: possible speedup?
Skip Montanaro
skip at mojam.com
Thu Sep 9 17:53:23 EDT 1999
Aahz> I'll test this if I have to, but do you know off-hand how this
Aahz> compares to [list append]
....
Aahz> What if you use range(100000) or range(1000000)?
Executing
import cStringIO, time, string
def doit(n, r):
print "doing", n, "iterations - range function ==", r
c = time.clock()
for i in r(n):
pass
print "loop overhead:", time.clock() - c
c = time.clock()
a=cStringIO.StringIO()
for i in r(n):
a.write('h')
a=a.getvalue()
print "cStringIO:", time.clock() - c
c = time.clock()
a = []
for i in r(n):
a.append('h')
a = string.join(a,'')
print "list append:", time.clock() - c
print
for i in [1000, 5000, 10000, 50000, 100000, 1000000]:
doit(i, range)
doit(i, xrange)
I got
doing 1000 iterations - range function == <built-in function range>
loop overhead: 0.0
cStringIO: 0.01
list append: 0.01
doing 1000 iterations - range function == <built-in function xrange>
loop overhead: 0.0
cStringIO: 0.01
list append: 0.01
doing 5000 iterations - range function == <built-in function range>
loop overhead: 0.01
cStringIO: 0.03
list append: 0.04
doing 5000 iterations - range function == <built-in function xrange>
loop overhead: 0.01
cStringIO: 0.03
list append: 0.04
doing 10000 iterations - range function == <built-in function range>
loop overhead: 0.02
cStringIO: 0.06
list append: 0.08
doing 10000 iterations - range function == <built-in function xrange>
loop overhead: 0.02
cStringIO: 0.07
list append: 0.08
doing 50000 iterations - range function == <built-in function range>
loop overhead: 0.11
cStringIO: 0.32
list append: 0.42
doing 50000 iterations - range function == <built-in function xrange>
loop overhead: 0.1
cStringIO: 0.32
list append: 0.39
doing 100000 iterations - range function == <built-in function range>
loop overhead: 0.22
cStringIO: 0.65
list append: 0.92
doing 100000 iterations - range function == <built-in function xrange>
loop overhead: 0.18
cStringIO: 0.63
list append: 0.88
doing 1000000 iterations - range function == <built-in function range>
loop overhead: 2.22
cStringIO: 6.55
list append: 10.27
doing 1000000 iterations - range function == <built-in function xrange>
loop overhead: 1.77
cStringIO: 6.35
list append: 10.04
which suggests there is a performance boost for cStringIO vs list append and
xrange vs range for large numbers, but that for loops with less than about
10,000 iterations, it probably doesn't matter what you use.
Skip Montanaro | http://www.mojam.com/
skip at mojam.com | http://www.musi-cal.com/~skip/
847-971-7098 | Python: Programming the way Guido indented...
More information about the Python-list
mailing list