2017-03-14 1 views
0

Donc, fondamentalement, j'essaie de prendre une liste de nombres et d'écrire une fonction récursive qui affiche toutes les sorties possibles dans une liste de listes.permutation d'une liste de nombres effectuée récursivement en python

Mon code:

def permutations(lst): 
    if len(lst) <= 1: 
     return lst 
    l = [] 
    for i in range(len(lst)): 
     m = lst[i] 
     remlst = lst[:i] + lst[i+1:] 
     for p in permutations(remlst): 
      l.append([m] + p) 
     return l 

Je reçois quelques erreurs de ne pas être en mesure d'ajouter int.

sortie simple:

>>>permutations([1,2]) 
[[1,2],[2,1]] 
+0

donnez-nous un stacktrace :) – putonspectacles

Répondre

1

Il y a une mise en œuvre pour que itertools:

import itertools 
for p in itertools.permutations(list): 
    # do stuff 

En outre, pour fixer votre propre fonction, notez que dans votre "cas de base" len(lst) <= 1 votre retour d'un liste, au lieu d'une liste de listes. En outre, la deuxième déclaration de retour doit être retirée de la boucle;

def permutations(lst): 
    if len(lst) <= 1: 
     return [lst] 
    l = [] 
    for i in range(len(lst)): 
     m = lst[i] 
     remlst = lst[:i] + lst[i+1:] 
     for p in permutations(remlst): 
      l.append([m] + p) 
    return l 
0

Parce que vous itérer résultat de permutations

for p in permutations(remlst): 

votre cas de base doit retourner une liste de listes comme votre cas récursif ne, sinon vous obtenez l'erreur TypeError: can only concatenate list (not "int") to list

Vous devez aussi revenir après la boucle extérieure.

def permutations(lst): 
    if len(lst) <= 1: 
     return [lst] # [[X]] 
    l = [] 
    for i in range(len(lst)): 
     m = lst[i] 
     remlst = lst[:i] + lst[i+1:] 
     for p in permutations(remlst): 
      l.append([m] + p) 
    return l # return at end of outer for loop