Como gerar todas as permissões de uma lista em Python
-
Utilize
itertools.permutations
para gerar todas as permutações de uma lista em Python - Use a recursão para gerar todas as permutaçõ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]