HOWTO · Python
Comment générer toutes les permutations d'une liste en Python
L'article présente des méthodes pour générer toutes les permutations d'une liste en Python
Sur cette page
Ce tutoriel traite des méthodes permettant de générer toutes les permutations d’une liste en Python.
Utilisez itertools.permutations pour générer toutes les permutations d’une liste en Python
Python fournit un outil de bibliothèque standard pour générer des permutations : itertools.permutation. L’exemple ci-dessous montre comment utiliser cet outil pour générer toutes les permutations d’une liste.
import itertools
inp_list = [4, 5, 6]
permutations = list(itertools.permutations(inp_list))
print(permutations)
Production:
[(4, 5, 6), (4, 6, 5), (5, 4, 6), (5, 6, 4), (6, 4, 5), (6, 5, 4)]
La longueur par défaut de la permutation est fixée à la longueur de la liste d’entrée. Cependant, nous pouvons spécifier la longueur de la permutation dans l’appel de fonction itertools.permutations. L’exemple ci-dessous illustre cela.
import itertools
inp_list = [1, 2, 3]
permutations = list(itertools.permutations(inp_list, r=2))
print(permutations)
Production:
[(4, 5), (4, 6), (5, 4), (5, 6), (6, 4), (6, 5)]
L’exemple ci-dessous illustre la façon de générer toutes les permutations de toutes les longueurs possibles d’une liste donnée.
import itertools
inp_list = [1, 2, 3]
permutations = []
for i in range(1, len(inp_list) + 1):
permutations.extend(list(itertools.permutations(inp_list, r=i)))
print(permutations)
Production:
[(4,), (5,), (6,), (4, 5), (4, 6), (5, 4), (5, 6), (6, 4), (6, 5), (4, 5, 6), (4, 6, 5), (5, 4, 6), (5, 6, 4), (6, 4, 5), (6, 5, 4)]
Utiliser la récursion pour générer toutes les permutations d’une liste en Python
Nous pouvons également utiliser la récursion pour générer toutes les permutations d’une liste en Python. L’exemple ci-dessous illustre cette possibilité.
def permutations(start, end=[]):
if len(start) == 0:
print(end)
else:
for i in range(len(start)):
permutations(start[:i] + start[i + 1 :], end + start[i : i + 1])
permutations([4, 5, 6])
Production:
[4, 5, 6]
[4, 6, 5]
[5, 4, 6]
[5, 6, 4]
[6, 4, 5]
[6, 5, 4]