On Tuesday, March 24, 2015 at 8:29:24 PM UTC-7, Chris Angelico wrote:
> On Wed, Mar 25, 2015 at 2:13 PM,  <nobody> wrote:
> > I have a list containing 9600 integer elements - each integer is either 0 
> > or 1.
> >
> > Starting at the front of the list, I need to combine 8 list elements into 1 
> > by treating them as if they were bits of one byte with 1 and 0 denoting bit 
> > on/off (the 8th element would be the rightmost bit of the first byte).
> >
> > Speed is not of utmost importance - an elegant solution is. Any suggestions?
> 
> Oooh fun!
> 

> >>> l = [1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 
> >>> 1]
> >>> list(int(''.join(str(i) for i in l),2).to_bytes(len(l)//8,'big'))
> [177, 105, 117]
> 
> Convert it into a string, convert the string to an integer
> (interpreting it as binary), then convert the integer into a series of
> bytes, and interpret those bytes as a list of integers.
> 
> Example works in Python 3. For Python 2, you'll need ord() to get the
> integers at the end.
> 
> I'm not sure how elegant this is, but it's a fun trick to play with :)
> 
> Next idea please! I love these kinds of threads.
> 
> ChrisA


Impressive - thanks!
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to