J'essaye de trouver toutes les permutations d'une liste d'entiers d'une gamme spécifique en utilisant la récursivité. Par exemple, si lst = [0,1,2]
, un appel à def permute(lst, 0, 1)
doit renvoyer [[0,1], [1,0]]
dans ce format. De même, un appel à permute(lst, 0, 2)
doit renvoyer [[0,1,2], [0,2,1]...]
.Prise en compte des indices lors de la recherche de permutations de list int en utilisant la récursivité en python?
Jusqu'à présent, mon code ne fonctionne que pour trouver des permutations d'une liste complète, de l'index 0 à len (LST):
def permute(lst, low, high):
if low == high:
print(lst)
for index in range(low, high + 1):
lst[index], lst[low] = lst[low], lst[index]
permute(lst, low + 1, high)
lst[index], lst[low] = lst[low], lst[index]
Où low = 0
et high
est le len(lst)
.
Si je change les indices dans ce code, je n'obtiens pas une sortie correcte. Toute suggestion sur la façon de prendre en compte les indices?
Vous modifiez 'lst', vous devez probablement créer une nouvelle liste pour conserver la permutation et la' renvoyer '. Pourquoi utiliser la récursivité? – AChampion
Je ne pense pas que cela puisse être fait facilement, sans détruire l'élégance de l'algorithme. Vous pouvez probablement le faire en donnant à 'permute' un argument supplémentaire qui maintient l'argument' low' d'origine, mais c'est un peu maladroit. La solution simple est d'avoir une autre fonction qui joue le rôle d'interface avec votre fonction 'permute' récursive. Vous appelez donc la fonction d'interface et elle appelle 'permute' avec une partie de la liste. –
Si vous n'avez pas besoin de récursion, vous pouvez utiliser 'itertools.permutation (lst [low: high + 1])'. – Eric