yes, 'xyz' * n is of course the fastest method to create a string of repeating elements.
More generally, beyond repeating identical strings, join still is much faster than '+'. I ran some small tests on Python 2.7:
[bbone=python,430]
import timeit
def stringjoin1(n):
mylist = [''] * n
for i in xrange(n):
mylist[i] = '0'
return ''.join(mylist)
def stringjoin2(n):
mylist = []
for i in xrange(n):
mylist.append('0')
return ''.join(mylist)
def stringadd(n):
mystr = ''
for i in xrange(n):
mystr += '0'
return mystr
def stringfunc(n):
return '0' * n
def main():
t = timeit.Timer("stringjoin1(500)", "from main import stringjoin1")
print 'stringjoin1(500)', t.timeit(number=10000)
t = timeit.Timer("stringjoin2(500)", "from main import stringjoin2")
print 'stringjoin2(500)', t.timeit(number=10000)
t = timeit.Timer("stringadd(500)", "from main import stringadd")
print 'stringadd(500) ', t.timeit(number=10000)
t = timeit.Timer("stringfunc(500) ", "from main import stringfunc")
print 'stringfunc(500) ', t.timeit(number=10000)
if name == 'main':
main()
[/bbone]
with this results (on my machine):
stringjoin1(500) 0.633952359867
stringjoin2(500) 1.21371403349
stringadd(500) 1.44271827844
stringfunc(500) 0.00755850254711