Chris wrote: > This is just some dummy code to mimic what's being done in the real > code. The actual code is python which is used as a scripting language in > a third party app. The data structure returned by the app is more or > less like the "data" list in the code below. The test for "ELEMENT" is > necessary ... it just evaluates to true every time in this test code. In > the real app perhaps 90% of tests will also be true.
As others have said, without info about what's happening in C, there's no way to know what's equivalent or fast enough. > So my question is how can I speed up what's happening inside the > function write_data()? Only allowed to use vanilla python (no psycho or > other libraries outside of a vanilla python install). Generally, don't create objects, don't perform repeated operations. In this case, batch up I/O. > def write_data1(out, data): > for i in data: > if i[0] is 'ELEMENT': > out.write("%s %06d " % (i[0], i[1])) > for j in i[2]: > out.write("%d " % (j)) > out.write("\n") def write_data1(out, data, map=map, str=str): SPACE_JOIN = ' '.join lines = [("ELEMENT %06d " % i1) + SPACE_JOIN(map(str, i2)) for i0, i1, i2 in data if i0 == 'ELEMENT'] out.write('\n'.join(lines)) While perhaps a bit obfuscated, it's a bit faster than the original. Part of what makes this hard to read is the crappy variable names. I didn't know what to call them. This version assumes that data will always be a sequence of 3-element items. The original version took about 11.5 seconds, the version above takes just over 5 seconds. YMMV, n -- http://mail.python.org/mailman/listinfo/python-list