Como gerar todas as permissões de uma lista em Python

Hassan Saeed 30 janeiro 2023
  1. Utilize itertools.permutations para gerar todas as permutações de uma lista em Python
  2. Use a recursão para gerar todas as permutações de uma lista em Python
Como gerar todas as permissões de uma lista em Python

Este tutorial discute métodos para gerar todas as permutações de uma lista em Python.

Utilize itertools.permutations para gerar todas as permutações de uma lista em Python

Python fornece uma ferramenta padrão de biblioteca para gerar permutações: itertools.permutation. O exemplo abaixo mostra como utilizar isto para gerar todas as permutações de uma 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)]

O comprimento padrão da permutação é definido para ser o comprimento da lista de inteiro. Entretanto, podemos especificar o comprimento da permutação na chamada de função itertools.permutations. O exemplo abaixo ilustra isto.

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)]

O exemplo abaixo ilustra como gerar todas as permutações de todos os comprimentos possíveis de uma determinada lista.

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)]

Use a recursão para gerar todas as permutações de uma lista em Python

Também podemos usar a recorrência para gerar todas as permutações de uma lista em Python. O exemplo abaixo ilustra isto.

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]

Artigo relacionado - Python List