[Tutor] Combination

Guillermo Fernandez Castellanos guillermo.fernandez.castellanos at gmail.com
Mon Jan 24 02:20:43 CET 2005


Got it.

import copy

def rec(list,length):
	result=[]
	if len(list)<=length:
		return [list]
	for elem in list:
		temp=copy.deepcopy(list)
		temp.remove(elem)
		temp=rec(temp,length)
		for i in temp:
			if i not in result:
				result.append(i)
	return result

>>> rec([1,2,3,4,5],3)
[[3, 4, 5], [2, 4, 5], [2, 3, 5], [2, 3, 4], [1, 4, 5], [1, 3, 5], [1,
3, 4], [1, 2, 5], [1, 2, 4], [1, 2, 3]]

The logic is:
1) If I take a list L of length l > n, the n-length subgroups will be
the union of all the n-length subgroups of all the possible lists of
length l-1 derived from L.
2) We keep unique copies of the results (don't wanna have several
times [1,3,5] for instance). Will be easier when I'll install Python
2,4 and have the sets.
3) We stop the recursion when we have a list of th length we desire

Well... of course, thanks to Kent I've finded a bunch of much better
implementations. I still did mine for personal pleasure :-)

Thanks to all,

Guille

On Fri, 21 Jan 2005 12:44:54 -0800 (PST), Danny Yoo
<dyoo at hkn.eecs.berkeley.edu> wrote:
> 
> 
> On Fri, 21 Jan 2005, Danny Yoo wrote:
> 
> > > 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)
> >
> >
> > There is a clean recursive way to define this.
> 
> Hi Guillermo,
> 
> Gaaa; I screwed up slightly.  *grin*
> 
> I just wanted to clarify: the function that I'm sketching out is not
> exactly the function that you're thinking of.  I'm doing more of a "give
> me all the subsets of L" kind of thing.
> 
> But if you can understand how to get all the subsets, you should be able
> to figure out how to get all the combinations of 'k' elements, because
> they're really similar problems.
> 
>


More information about the Tutor mailing list