Emile,

> Your times will improve when not burdened by the repeated method lookups and 
> element-wise list creation.

Excellent point!!

Here's updated timings for each technique followed by copy and paste
source code for anyone that wants to fiddle with these tests. I've
placed your name above your script suggestions.

My results (Python 2.7/32-bit on Window 7/64-bit)

testListAppend = 10.95 sec
testStringConcat = 49.49 sec
testStringIO = 14.68 sec
testListAppend2 = 7.42 sec <-------- fastest !!!
testListAppend3 = 8.22 sec
testStringIO2 = 10.91 sec

Thanks for the feedback - really appreciated.

Malcolm


# test performance of various string concatenation techniques

import cStringIO
import timeit

source = 'x' * 5000000

def testListAppend():
        output = list()
        for char in source:
                output.append( char )
        output = ''.join( output )
        
def testStringConcat():
        output = ''
        for char in source:
                output += char
        
def testStringIO():     
        output = cStringIO.StringIO()
        for char in source:
                output.write( char )
        output = output.getvalue()


# "Emile van Sebille" <em...@fenx.com>:
# Your times will improve when not burdened by the repeated method
lookups and element-wise list creation:

def testListAppend2():
     output = list()
     append = output.append
     for char in source:
         append( char )
     output = ''.join( output )

def testListAppend3():
     input = list( source )
     output = list()
     append = output.append
     for char in input:
         append( char )
     output = ''.join( output )

def testStringIO2():
     output = cStringIO.StringIO()
     write = output.write
     for char in source:
         write( char )
     output = output.getvalue()
        
def time( func ):
        timingObject = timeit.Timer( func )
        runtime = timingObject.timeit( 10 )
        print '%s = %.2f sec' % ( func.__name__, runtime )

time( testListAppend )
time( testStringConcat )
time( testStringIO )
time( testListAppend2 )
time( testListAppend3 )
time( testStringIO2 )
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to