Bear in mind this is extremely outdated article and some of the advice should be taken with very big grain of salt, as things have changed since 2002. The most significant improvement of Python (in this context) is the introduction of generators, which seem like an almost obvious choice for a problem such as this. The solutions that immediately came to my mind, for example, were this:
They are both about twice as fast (in 2.7.2 CPython) as the suggested array solution (f2_1 performs slightly better for smaller lists), and their readability is rather significantly better.
To avoid confusing newbies, str() does not concatenate a list (or generator, etc.) of strings into a single string. You probably meant to call ''.join() instead.
>>> import itertools
>>> def f2_1(list):
... return str(itertools.imap(chr, list))
...
>>> f2_1(range(10))
'<itertools.imap object at 0x10048e850>'
>>> def f2_2(list):
... return str(chr(c) for c in list)
...
>>> f2_2(range(10))
'<generator object <genexpr> at 0x10046b780>'