Xah Lee, 2012-03-14
Google's Python style guide has this interesting advice:
Avoid using the + and += operators to accumulate a string within a loop. Since strings are immutable, this creates unnecessary temporary objects and results in quadratic rather than linear running time. Instead, add each substring to a list and ''.join the list after the loop terminates (or, write each substring to a cStringIO.StringIO buffer).
They gave 2 examples, one using string append and the other using list append. Here's their examples, slightly modified to be runnable code:
# python # append string in a loop employee_list = [["Mary", "Jane"], ["Jenny", "Doe"], ["Alice", "Johnson"]] employee_table = '<table>' for last_name, first_name in employee_list: employee_table += '<tr><td>%s, %s</td></tr>' % (last_name, first_name) employee_table += '</table>' print employee_table
# python # append string in a loop, but using list instead employee_list = [["Mary", "Jane"], ["Jenny", "Doe"], ["Alice", "Johnson"]] items = ['<table>'] for last_name, first_name in employee_list: items.append('<tr><td>%s, %s</td></tr>' % (last_name, first_name)) items.append('</table>') employee_table = ''.join(items) print employee_table
This is interesting in 2 aspects:
2012-03-16 For a speed test, see: