[Tutor] Permutations?

Rich Krauter rmkrauter at yahoo.com
Sun Jul 25 16:21:34 CEST 2004


On Sun, 2004-07-25 at 03:40, Hee-Seng Kye wrote:
> def perm(k):
>      # Compute the list of all permutations of k
>      if len(k) <= 1:
>          return [k]
>      r = []
>      for i in range(len(k)):
>          s =  k[:i] + k[i+1:]
>          p = perm(s)
>          for x in p:
>              r.append(k[i:i+1] + x)
>      return r
> 
> Could someone tell me how I can modify the above function so that it 
> produces a list of permutations of k that only begins on k[0]?
> 
> If k = [0,1,2,3], I want to modify perm(k) so that it only produces 
> [[0,1,2,3], [0,1,3,2], [0,2,1,3], [0,2,3,1], [0,3,1,2], [0,3,2,1]].
> 


You could just call your function as-is with a slice of the original 
list, and then append the initial list element(s) to the results:

lst = [0,1,2,3]
results = perm(lst[1:])
print map(lambda res,i=lst[0]:[i]+res,results)

Good luck.

Rich




More information about the Tutor mailing list