Permutações de uma string em Python

Manav Narula 30 janeiro 2023
  1. Use a função itertools.permutations() para retornar todas as permutações de uma string em Python
  2. Crie uma função definida pelo usuário para retornar todas as permutações para uma string em Python
Permutações de uma string em Python

Por permutação, queremos dizer o número total de rearranjos possíveis para um determinado número de elementos de uma maneira única, sem considerar a ordem dos rearranjos.

Uma string, como sabemos, pode ser considerada uma coleção de caracteres individuais.

Neste artigo, tentaremos encontrar todas as permutações possíveis para uma determinada string.

Use a função itertools.permutations() para retornar todas as permutações de uma string em Python

O módulo itertools é usado para criar e trabalhar com diferentes objetos iteráveis. A função permutations() deste módulo pode retornar todos os arranjos possíveis para um determinado conjunto de valores.
Ele retorna um objeto do tipo itertools que contém uma tupla contendo o possível arranjo dos elementos. Podemos usar uma lista para ver os elementos deste objeto. Podemos usar essa função com uma string também.

Por exemplo,

from itertools import permutations

lst = list(permutations("day"))
print(lst)

Resultado:

[('d', 'a', 'y'), ('d', 'y', 'a'), ('a', 'd', 'y'), ('a', 'y', 'd'), ('y', 'd', 'a'), ('y', 'a', 'd')]

Observe as tuplas criadas na saída contendo a organização dos caracteres. Podemos mudar isso para uma lista de strings usando a função join () e o método de compreensão de lista.

Veja o seguinte código.

from itertools import permutations

lst = ["".join(p) for p in permutations("day")]
print(lst)

Resultado:

['day', 'dya', 'ady', 'ayd', 'yda', 'yad']

Combinamos os elementos da tupla usando a função join() e usamos isso para cada tupla iterando pela lista.

Crie uma função definida pelo usuário para retornar todas as permutações para uma string em Python

Podemos criar uma função direta para encontrar todas as permutações de uma string. Vamos criar uma função recursiva. Neste método, estaremos apenas trocando os elementos da string uma vez e chamando a função novamente com o novo arranjo. Exibimos os arranjos finais.

Implementamos a lógica acima no código a seguir.

def string_permutations(s, i, n):
    if i == n:
        print("".join(s))
    else:
        for j in range(i, n):
            s[i], s[j] = s[j], s[i]
            string_permutations(s, i + 1, n)
            s[i], s[j] = s[j], s[i]


a = "day"
x = len(a)
s = list(a)
print(permute(s, 0, x))

Resultado:

day
dya
ady
ayd
yad
yda
None

Como você pode ver, as posições inicial e final são especificadas onde desejamos fazer os rearranjos. A string também é passada como uma lista de caracteres. Para encontrar todas as permutações possíveis, definimos o início como 0 e o final como o comprimento da string.

Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Artigo relacionado - Python String