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