Comment générer toutes les permutations d'une liste en Python

Hassan Saeed 30 janvier 2023
  1. Utilisez itertools.permutations pour générer toutes les permutations d’une liste en Python
  2. Utiliser la récursion pour générer toutes les permutations d’une liste en Python
Comment générer toutes les permutations d'une liste en Python

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]

Article connexe - Python List