Python: Append String in Loop

By Xah Lee. Date: . Last updated: .

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).

[from Google's python style guide. https://google.github.io/styleguide/pyguide.html]

They gave 2 examples, one using string append and the other using list append. Here's their examples, slightly modified to be runnable code:

# -*- coding: utf-8 -*-
# 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
# <table><tr><td>Mary, Jane</td></tr><tr><td>Jenny, Doe</td></tr><tr><td>Alice, Johnson</td></tr></table>

here's a version using array:

# -*- coding: utf-8 -*-
# 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
# <table><tr><td>Mary, Jane</td></tr><tr><td>Jenny, Doe</td></tr><tr><td>Alice, Johnson</td></tr></table>

This is interesting in 2 aspects:

For a speed test, see: [• Python Strings Accumulation Techniques By Magnun. At http://www.mindbending.org/python-strings-accumulation-techniques/ , Accessed on 2012-03-16 ]