On Dec 15, 4:45 am, Gary Herron <[EMAIL PROTECTED]> wrote: > [EMAIL PROTECTED] wrote: > > Hi folks, > > > Thanks, for all the help. I tried running the various options, and > > here is what I found: > > > from array import array > > from time import time > > > def f1(recs, cols): > > for r in recs: > > for i,v in enumerate(r): > > cols[i].append(v) > > > def f2(recs, cols): > > for r in recs: > > for v,c in zip(r, cols): > > c.append(v) > > > def f3(recs, cols): > > for r in recs: > > map(list.append, cols, r) > > > def f4(recs): > > return zip(*recs) > > > records = [ tuple(range(10)) for i in xrange(1000000) ] > > > columns = tuple([] for i in xrange(10)) > > t = time() > > f1(records, columns) > > print 'f1: ', time()-t > > > columns = tuple([] for i in xrange(10)) > > t = time() > > f2(records, columns) > > print 'f2: ', time()-t > > > columns = tuple([] for i in xrange(10)) > > t = time() > > f3(records, columns) > > print 'f3: ', time()-t > > > t = time() > > columns = f4(records) > > print 'f4: ', time()-t > > > f1: 5.10132408142 > > f2: 5.06787180901 > > f3: 4.04700708389 > > f4: 19.13633203506 > > > So there is some benefit in using map(list.append). f4 is very clever > > and cool but it doesn't seem to scale. > > > Incidentally, it took me a while to figure out why the following > > initialization doesn't work: > > columns = ([],)*10 > > apparently you end up with 10 copies of the same list. > > Yes. A well known gotcha in Python and a FAQ. > > > Finally, in my case the output columns are integer arrays (to save > > memory). I can still use array.append but it's a little slower so the > > difference between f1-f3 gets even smaller. f4 is not an option with > > arrays.
If you want another answer. The opposite of zip(lists) is zip(* list_of_tuples) That is: lists == zip(zip(* lists)) I don't know about its speed though compared to the other suggestions. Matt -- http://mail.python.org/mailman/listinfo/python-list