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