The 2**n different lists that you are seeking have a direct association to
the binary representation of the integers 0 through (2**n)-1.
You can use this fact and the "repeated division method" for converting
numbers between different bases to generate these lists and form the desired
list of lists:

def bit_list_maker(n):
   x = 2**n
   solution_set = []
   for i in range(x):
       this_answer = []
       while i>0:
           this_answer.append(i%2)
           i=i/2
       while len(this_answer)<n:
           this_answer.append(0)
       this_answer.reverse()
       solution_set.append(this_answer)
   return solution_set
*
*
Another fun way to do it is to build up the lists recursively.  The
possibilities for n bits can be built from the possibilities for n-1 bits by
adding a 1 and a 0 to each possibility (ending up with twice as many
elements):

def recursive_bit_list(n):
   if n==1:
       return [[0],[1]]
   else:
       return map(lambda x: x+[0], recursive_bit_list(n-1)) + \
              map(lambda x: x+[1], recursive_bit_list(n-1))

Hope this helps!

-Hugh


On 6/14/07, Andy Cheesman <[EMAIL PROTECTED] > wrote:

Hi people

I am trying to generate an array of all possible combinations of 1, and
zeros (see example data) for a rather nice Kinetic mote Carlo program
which I am writing python. So far, I've been working out for
combinations for 4 or less species by hand as it is quick! but I am
looking to automate the process so I can compute combinations for large
  numbers of possible species.
I could automate the generation of the array by the use of multiple
loops but that doesn't seem rather pythonic. I was wondering if anyone
had any sensible suggestions or pointers for efficient mechanisms for
the array.

Many Thanks
Andy

Example Data
3 species
array([[1, 1, 1],
       [1, 1, 0],
       [1, 0, 1],
       [0, 1, 1],
       [1, 0, 0],
       [0, 1, 0],
       [0, 0, 1],
       [0, 0, 0]])
4 species
array([[1, 1, 1, 1],
       [0, 1, 1, 1],
       [1, 0, 1, 1],
       [1, 1, 0, 1],
       [1, 1, 1, 0],
       [1, 1, 0, 0],
       [1, 0, 1, 0],
       [1, 0, 0, 1],
       [0, 1, 1, 0],
       [0, 1, 0, 1],
       [0, 0, 1, 1],
       [1, 0, 0, 0],
       [0, 1, 0, 0],
       [0, 0, 1, 0],
       [0, 0, 0, 1],
       [0, 0, 0, 0]])

_______________________________________________
Tutor maillist  -   Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to