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

Mac Ryan quasipedia at gmail.com
Wed Jul 28 00:53:02 CEST 2010

```On Tue, 2010-07-27 at 23:31 +0100, Mark Lawrence wrote:
> On 27/07/2010 23:20, ZUXOXUS wrote:
> > Hi all pythoners
> >
> > I've got a probably easy to answer question.
> >
> > Say I've got a collections of strings, e.g.: 'man', 'bat', 'super', 'ultra'.
> >
> > They are in a list, or in a sequence or whatever, say a bag of words
> >
> > And now I want to know how many couples I can do with them, and I want the
> > program to show me the actual couples: 'manman', 'manbat', 'mansuper',
> > 'manultra', 'batbat', 'batman', 'batsuper', etc.
> >
> > But hey, why building up new words from just two strings? I also want to
> > know the possible combinations of three words, four words, and perhaps, why
> > not, five words.
> >
> > So, is it easy to do?
> >
> > Sorry, I'm new in programing, and am probably far from being a math-master
> >
> > I'm clueless, I think probably the code have some FOR I IN SEQUENCE... but
> > then what? I don't know how to say: take every element and paste it to
> > another one from the bag, and with another one, and with another one,...
> >
> > If it's too complex, I dont need the whole code recipe, just need some
> > clues, or perhaps a useful link
> >
> > Thank you very much in advance!
> >
> > _______________________________________________
> > Tutor maillist  -  Tutor at python.org
> > To unsubscribe or change subscription options:
> > http://mail.python.org/mailman/listinfo/tutor
>
> The lazy way.
> http://docs.python.org/library/itertools.html
> Look for combinations().

>From the examples listed by the OP (see: "manbat", "batman") I actually
believe he is looking for the cartesian product.

The syntax should therefore be (DISCLAIMER: I am going by memory without
having the possibility of testing right now):

import itertools
for prod in itertools.product(my_list_of_words, 2):
print prod

(The two as second parameter tells that you are wishing to have a
bi-dimensional product, with both axis having the same list of words.