On Mar 1, 7:36 pm, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: > On Mar 1, 12:46 pm, "Bart Ogryczak" <[EMAIL PROTECTED]> wrote:
> > > This solution looks nice, but how does it work? I'm guessing > > > struct.unpack will provide me with 8 bit bytes > > > unpack with 'B' format gives you int value equivalent to unsigned char > > (1 byte). > > > > (will this work on any system?) > > > Any system with 8-bit bytes, which would mean any system made after > > 1965. I'm not aware of any Python implementation for UNIVAC, so I > > wouldn't worry ;-) > > > > How does count1 work exactly? > > > 1,2,4,8,16,32,64,128 in binary are > > 1,10,100,1000,10000,100000,1000000,10000000 > > x&1 == 1 if x has first bit set to 1 > > x&2 == 2, so (x&2>0) == True if x has second bit set to 1 > > ... and so on. > > In the context of int, True is interpreted as 1, False as 0. > > 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. -- http://mail.python.org/mailman/listinfo/python-list