[Tutor] Automatic generation of an "all possible combinations" array
Hugh M
hyoogle at gmail.com
Thu Jun 14 15:06:39 CEST 2007
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 <Andy.cheesman at bristol.ac.uk > 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 at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/tutor/attachments/20070614/656db952/attachment.htm
More information about the Tutor
mailing list