[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