On Fri, 21 Jan 2005, Guillermo Fernandez Castellanos wrote:

> I'm trying to take a list and find all the unique combinations of that
> list.
>
> I mean:
> if I enter (1,2,3,4,5) and I watn combinations of 3, I want to find:
> (1,2,3) but then not (2,1,3), (3,1,2),...
> (1,2,4)
> (1,2,5)
> (2,3,5)
> (3,4,5)


Hi Guillermo,


There is a clean recursive way to define this.  I'll try to sketch out how
one can go about deriving the function you're thinking of.


Let's say that we have a list L,

     [1, 2, 3]

and we want to create all combinations of elements in that list.  Let's
call the function that does this "createComb()".  How do we calculate
createComb([1, 2, 3])?


We can just start writing it out, but let's try a slightly different
approach.  Imagine for the moment that we can construct createComb([2,
3]):

    createComb([2, 3])   -> [[2, 3], [2], [3]]


We know, just from doing things by hand, that createComb([1, 2, 3]) of the
whole list will look like:

    createComb([1, 2, 3) -> [[1, 2, 3], [1, 2], [1, 3],
                                [2, 3],    [2],    [3]]

If we compare createComb([1, 2, 3]) and createComb([2, 3]), we might be
able to see that they're actually very similar to each other.


Does this make sense so far?  Please feel free to ask questions about
this.



Good luck!

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

Reply via email to