HOWTO · Python
Cómo generar todas las permutaciones de una lista en Python
El artículo introduce métodos para generar todas las permutaciones de una lista en Python
En esta página
Este tutorial discute los métodos para generar todas las permutaciones de una lista en Python.
Usar itertools.permutations para generar todas las permutaciones de una lista en Python
Python proporciona una herramienta estándar de biblioteca para generar permutaciones: itertools.permutations. El siguiente ejemplo muestra cómo usar esto para generar todas las permutaciones de una lista.
import itertools
inp_list = [4, 5, 6]
permutations = list(itertools.permutations(inp_list))
print(permutations)
Resultado:
[(4, 5, 6), (4, 6, 5), (5, 4, 6), (5, 6, 4), (6, 4, 5), (6, 5, 4)]
La longitud por defecto de la permutación se establece como la longitud de la lista de entrada. Sin embargo, podemos especificar la longitud de la permutación en la llamada a la función itertools.permutations. El siguiente ejemplo ilustra esto.
import itertools
inp_list = [1, 2, 3]
permutations = list(itertools.permutations(inp_list, r=2))
print(permutations)
Resultado:
[(4, 5), (4, 6), (5, 4), (5, 6), (6, 4), (6, 5)]
El siguiente ejemplo ilustra cómo generar todas las permutaciones de todas las longitudes posibles de una lista dada.
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)
Resultado:
[(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)]
Usar Recursión para generar todas las permutaciones de una lista en Python
También podemos usar la recursión para generar todas las permutaciones de una lista en Python. El siguiente ejemplo ilustra esto.
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])
Resultado:
[4, 5, 6]
[4, 6, 5]
[5, 4, 6]
[5, 6, 4]
[6, 4, 5]
[6, 5, 4]