Cómo generar todas las permutaciones de una lista en Python

Hassan Saeed 30 enero 2023
  1. Usar itertools.permutations para generar todas las permutaciones de una lista en Python
  2. Usar Recursión para generar todas las permutaciones de una lista en Python
Cómo generar todas las permutaciones de una lista en Python

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]

Artículo relacionado - Python List