En Fri, 02 Mar 2007 08:22:36 -0300, Bart Ogryczak <[EMAIL PROTECTED]> escribió:
> On Mar 1, 7:36 pm, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> > wrote: >> Thanks Bart. That's perfect. The other suggestion was to precompute >> count1 for all possible bytes, I guess that's 0-256, right? > > 0-255 actually. It'd be worth it, if accessing dictionary with > precomputed values would be significantly faster then calculating the > lambda, which I doubt. I suspect it actually might be slower. Dictionary access is highly optimized in Python. In fact, using a precomputed dictionary is about 12 times faster: py> import timeit py> count1 = lambda x: (x&1)+(x&2>0)+(x&4>0)+(x&8>0)+(x&16>0)+(x&32>0)+(x&64>0)+ (x&128>0) py> d256 = dict((i, count1(i)) for i in range(256)) py> timeit.Timer("for x in range(256): w = d256[x]", "from __main__ import d256" ).repeat(number=10000) [0.54261253874445003, 0.54763468541393934, 0.54499943428564279] py> timeit.Timer("for x in range(256): w = count1(x)", "from __main__ import cou nt1").repeat(number=10000) [6.1867963665773118, 6.1967124313285638, 6.1666287195719178] -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list