[Tutor] Calculating and returning possible combinations of elements from a given set

Dave Angel davea at ieee.org
Wed Jul 28 20:00:09 CEST 2010


ZUXOXUS wrote:
> <snip>
> My doubt now is whether I can change the way python show the combinations.
>
> I mean, here's what python actually does:
>
>   
>>>> for prod in itertools.product('abc', repeat=3):
>>>>         
> print(prod)
>
> ('a', 'a', 'a')
> ('a', 'a', 'b')
> ('a', 'a', 'c')
> ('a', 'b', 'a')
> ('a', 'b', 'b')
> ('a', 'b', 'c')
> [...] etc.
>
>
> what if I want the combinations listed in a... well, in a list, kind of like
> this:
>
> ('aaa', 'aab', aac', 'aba', 'abb', 'abc' [...]etc.)
>
> can I do that?
>
> I have checked how the function works (see below), perhaps I have to just
> change couple of lines of the code and voilá, the result displayed as I
> want... But unfortunately I'm too newbie for this, or this is too hardcore:
>
> def product(*args, **kwds):
>     # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
>     # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
>     pools = map(tuple, args) * kwds.get('repeat', 1)
>     result = [[]]
>     for pool in pools:
>         result = [x+[y] for x in result for y in pool]
>     for prod in result:
>         yield tuple(prod)
>
>
> Any ideas will be very much appreciated.
>
> <snip, double-included history>
Well itertools.product() already returns an iterator that's equivalent 
to a list of tuples.   You can print that list simply by doing something 
like:
print list(itertools.product('abc', repeat=3))

So your question is how you can transform such a list into a list of 
strings instead.

so try each of the following.

for prod in itertools.product('abc', repeat=3):
    print "".join(prod)

print ["".join(prod) for prod in itertools.product('abc', repeat=3)]

DaveA




More information about the Tutor mailing list