thank you for your help and support. i`ll keep your advice in mind. :) cheers!!! Zubin
On Tue, Dec 22, 2009 at 8:07 PM, Lie Ryan <lie.1...@gmail.com> wrote: > On 12/22/2009 5:13 PM, Zubin Mithra wrote: >> >> I have the following two implementation techniques in mind. >> >> def myfunc(mystring): >> check = "hello, there " + mystring + "!!!" >> print check >> >> >> OR >> structure = ["hello, there",,"!!!"] >> def myfunc(mystring): >> structure[2] = mystring >> output = ''.join(mystring) >> >> i heard that string concatenation is very slow in python; so should i >> go for the second approach? could someone tell me why? Would there be >> another 'best-practice-style'? >> Please help. Thankx in advance! > > Python's strings are immutable and to concatenate two string the interpreter > need to copy two whole string into a new string object. This isn't a > performance problem until you're trying to concatenate a list containing a > thousand strings: > ['abc', 'bcd', 'cde', 'def', ...] > with the naive approach: > joined = '' > for s in lst: > joined = joined + s > > first python will conc. '' and 'abc', copying 0+3 = 3 chars > then it conc. 'abc' and 'bcd', copying 3+3 = 6 chars > then it conc. 'abcbcd' and 'cde' copying 6+3 = 9 chars > then it conc. 'abcbcdcde' and 'def' copying 9+3 = 12 chars > and so on... > > for four 3-letter strings, python copies 3 + 6 + 9 + 12 = 30 chars, instead > of the minimum necessary 12 chars. It gets worse as the number of strings > increases. > > When you concatenate two 1000-chars large strings, both + and ''.join will > have to copy 2000 chars. But when you join one thousand 2-chars string > you'll need to copy 1001000 chars[!] with +. > > Now, early optimization *is evil*. Don't start throwing ''.join every here > and there. The performance by the concatenations won't start to matter until > you're concatenating a large lists (>40) and + is much more readable than > ''.join(). > > When concatenating small number of strings I preferred > %-interpolation/str.format; it's often much more readable than ''.join and > +. > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list