CARVIEW |
ConcatenationTestCode
Counter to the PythonSpeed/PerformanceTips, on python 2.4 the following string concatenation is almost twice as fast:
1 from time import time
2 t = time()
3
4 s = 'lksdajflakjdsflku09uweoir'
5 for x in range(40):
6 s += s[len(s)/2:]
7
8 print 'duration:', time()-t
as:
1 from time import time
2 t = time()
3
4 s = 'lksdajflakjdsflku09uweoir'
5 for x in range(40):
6 s = "".join((s, s[len(s)/2:]))
7
8 print 'duration:', time()-t
On the win32 Python 2.4 I'm seeing the join sample above complete in less than half the time of the concatenating sample.
-db
Usually the join() is located outside the loop, that code makes this extremely hard though (becuase of the self-referencing of the generated string). But that situation is not the norm. -- JürgenHermann 2005-08-01 06:07:51
Are you guys kidding? The whole page is contrieved. Correct implementation of "join" is:
from time import time t = time() s = 'lksdajflakjdsflku09uweoir' r = [s] for x in range(40): r.append(s[len(s)/2:]) s = "".join(r) print 'duration:', time()-t
which gives on PythonWin 2.4 (#60, Nov 30 2004, 09:34:21) [MSC v.1310 32 bit (Intel)] on win32 execution times:
1st duration: 54.4060001373 Last duration: 0.0160000324249
-- -- MikeRovner 2005-08-02 10:19:06
Mike, that code generates a very different (and much shorter) s. Note how the original code takes the half of the preconcatenated s, making the size grow exponentially (which generates megabytes of data). -- JürgenHermann 2005-08-30 18:44:05
-- -- DavidFord 2005-10-18 10:19:06 A few notes (your mileage may vary - this is a 4Mb file being stripped of unprintable characters)
Regex replacement rather than creating a list and joining it is 2.5x faster than the tooling above
This is far slower than the equivalent Java code (around 4x slower) using String.charAt() and StringBuffers
EditText (last edited 2006-11-18 02:40:09 by 62)
DeleteCache (cached 2007-10-29 18:38:22)- Login
- Navigation
- Actions
- Your recent pages