[Tutor] help with list permutations

Kent Johnson kent37 at tds.net
Fri Jan 4 14:34:05 CET 2008


Chris Fuller wrote:
> This is a good case for recursion. My solution is in two steps.
> Here is the code:
> 
> def recursion_is_your_friend(l):
>    if len(l) == 1:
>       return l
>    else:
>       return [ (i, recursion_is_your_friend(l[1:])) for i in l[0] ]
> 
> l = recursion_is_your_friend([['a','b'],['c','d','e'],['f'],['g','h']])

> The next step is to trace all the paths from the root to the leaves.

You don't have to do this in two steps, you can generate the desired 
list directly. For example:

def recursion_is_your_friend(l):
    if not l:
       return [[]]
    else:
       values = [[i] + value
           for i in l[0]
               for value in recursion_is_your_friend(l[1:]) ]
       return values

print recursion_is_your_friend([['a','b'],['c','d','e'],['f'],['g','h']])

Kent


More information about the Tutor mailing list