combinatorics via __future__ generators
Chris Rebert
clp2 at rebertia.com
Wed Nov 18 21:42:07 EST 2009
On Wed, Nov 18, 2009 at 4:58 PM, Phlip <phlip2005 at gmail.com> wrote:
> Python:
>
> I have a quaint combinatorics problem. Before I solve it, or find a
> solution among "generators", I thought y'all might like to show off
> any solutions.
>
> Given an array like this...
>
> [0, 4, 3]
>
> Produce an array like this:
>
> [
> [0, 0, 0],
> [0, 1, 0],
> [0, 2, 0],
> [0, 3, 0],
> [0, 1, 1],
> [0, 2, 1],
> [0, 3, 1],
> [0, 1, 2],
> [0, 2, 2],
> [0, 3, 2],
> ]
>
> The first array is the counts of options in 4 slots, and the second is
> all combinations of indexes of each option, such that every option
> associates once with every other option. The leading 0 simply
> represents a slot with no options; the algorithm must preserve those.
>
> This should be child's play for the generator package, right?
from itertools import imap, product
def special_range(n):
return (xrange(n) if n else [0])
def something(arr):
return product(*imap(special_range, arr))
print list(something([0,4,3]))
Cheers,
Chris
--
http://blog.rebertia.com
More information about the Python-list
mailing list