Pesquisa de site

Programa Python para expandir string de frequência de caracteres


Em Python, strings estão entre os tipos mais usados. Isso é feito facilmente simplesmente colocando as letras entre aspas. Python trata aspas simples e duplas da mesma maneira. Atribuir um valor a uma variável e criar uma string é muito simples.

Neste artigo, aprenderemos como expandir uma string de frequência de caracteres em python.

Métodos usados

A seguir estão os vários métodos para realizar esta tarefa:

  • Usando funções zip() e join()

  • Usando o módulo re(regex) e a função join()

  • Sem usar nenhuma função integrada

Exemplo

Suponha que pegamos uma string de entrada contendo caracteres seguidos de sua frequência. Vamos agora expandir os caracteres com a seguinte frequência.

Entrada

inputString = 'p5y3t6h2o1n4'

Saída

Resultant string after expanding − pppppyyytttttthhonnnn

Nesta string de entrada, o caractere ‘p’ é expandido 5 vezes, y é expandido 3 vezes,… e assim por diante, de acordo com a seguinte frequência após o caractere.

Usando funções zip() e join()

Neste método, usaremos as funções zip() e join() do python para expandir a string de frequência do caractere e imprimir a saída.

Sintaxe

join()

join() é uma função de string em Python usada para unir elementos de uma sequência que são separados por um separador de string. Esta função conecta elementos de sequência para converter em uma string.

zip() 

A função zip() pode ser usada para combinar duas listas/iteradores.

Algoritmo (etapas)

A seguir estão o Algoritmo/etapas a serem seguidas para realizar a tarefa desejada –.

  • Crie uma variável para armazenar a string de entrada contendo caracteres seguidos de sua frequência.

  • Imprima a string de entrada.

  • Percorra a função zip() da string para combinar iteradores onde o primeiro iterador itera sobre o caractere e o segundo itera sobre a frequência.

  • Multiplique o primeiro iterador pelo segundo iterador para repetir/expandir o caractere.

  • Converta este objeto zip em uma string usando a função join().

  • Imprima a string resultante após expandir.

Exemplo

O programa a seguir retorna a string de frequência de caracteres expandida de uma string de entrada usando as funções zip() e join() –

# input string containing characters followed by their frequency.
inputString = 'p5y3t6h2o1n4'
# printing input string
print("Input String: ", inputString)
# Creating a pair(p,q) using zip function 
# where p stands for character and q stands for its frequency
# Multiplying character(p) with q to repeat q times
expandStr = "".join(p * int(q)
   for p, q in zip(inputString[0::2], inputString[1::2]))
# printing the resultant string after expanding
print("Resultant string after expanding:", expandStr)

Saída

Ao ser executado, o programa acima irá gerar a seguinte saída –

Input String:  p5y3t6h2o1n4
Resultant string after expanding: pppppyyytttttthhonnnn

Complexidade de tempo: O(n)

Espaço Auxiliar: O(n)

Usando o módulo re(regex) e a função join()

Neste método, usaremos o módulo regex e a função join para expandir a sequência de frequência de caracteres.

re.findall()− 

Todas as correspondências de padrão não sobrepostas em uma string, como uma lista de strings, são retornadas pela função findall(). A string é varrida da esquerda para a direita e as correspondências são retornadas na ordem em que foram encontradas.

O programa a seguir retorna a sequência de frequência de caracteres expandida de uma sequência de entrada usando o módulo regex e as funções join() –

# importing re i.e, regex module
import re
# input string containing characters followed by their frequency.
inputString = 'p5y3t6h2o1n4'
# printing input string
print("Input String: ", inputString)
# Longer digit strings can be included by using findall 
# to match together numbers and characters independently.
expandStr = ''.join(charactr * int(n or 1)
   for charactr, n in re.findall(r'(\w)(\d+)?', inputString))
# printing the resultant string after expanding
print("Resultant string after expanding:", expandStr)

Saída

Ao ser executado, o programa acima irá gerar a seguinte saída –

Input String:  p5y3t6h2o1n4
Resultant string after expanding: pppppyyytttttthhonnnn

Sem usar nenhuma função integrada

Algoritmo (etapas)

A seguir estão o algoritmo/etapas a serem seguidas para realizar a tarefa desejada –

  • Crie uma variável para armazenar a string de entrada contendo caracteres seguidos de sua frequência.

  • Imprima a string de entrada.

  • Inicializando uma lista vazia para armazenar caracteres.

  • Inicializando outra lista vazia para armazenamento de suas respectivas frequências.

  • Use o loop for para percorrer cada caractere da string de entrada até seu comprimento com a função len() (retorna um número de itens em um objeto).

  • Use a instrução if condicional para verificar se o índice atual está par com o operador módulo(%).

  • Use a função append() (adiciona o elemento à lista no final) para anexar o elemento correspondente no índice atual à lista de caracteres se a condição for true

  • Caso contrário, anexe esse caractere de frequência como um número inteiro à lista de frequências.

  • Crie uma string vazia para armazenar a string expandida resultante.

  • Use novamente o loop for para percorrer a lista de caracteres até seu comprimento.

  • Multiplique o caractere no índice atual por sua frequência e concatene-o à string expandida resultante usando o operador ‘+’.

  • Imprima a string resultante após expandir.

Exemplo

O programa a seguir retorna a sequência de frequência de caracteres expandida de uma sequência de entrada sem usar nenhuma função integrada –

# input string containing characters followed by their frequency.
inputString = 'p5y3t6h2o1n4'
# printing input string
print("Input String: ", inputString)
# empty list for storing characters
charsList = []
# empty list for storing their frequencies
freqList = []
# traversing through each character of the input string till its length
for p in range(0, len(inputString)):
  # checking whether the current index is even
    if(p % 2 == 0):
        # appending that corresponding element at the current index to
        # the characters list if the condition is true
        charsList.append(inputString[p])
    else:
        # otherwise appending that @@ to the frequency list
        freqList.append(int(inputString[p]))
# storing resultant expanded string
expandStr = ""
# traversing through the characters list till its length
for p in range(0, len(charsList)):
  # multiplying character at current index with its frequency
  # and concatenating it to the expanded string
    expandStr += charsList[p]*freqList[p]
# printing the resultant string after expanding
print("Resultant string after expanding:", expandStr)

Saída

Ao ser executado, o programa acima irá gerar a seguinte saída –

Input String:  p5y3t6h2o1n4
Resultant string after expanding: pppppyyytttttthhonnnn

Conclusão

Neste artigo, aprendemos três maneiras distintas de expandir strings de frequência de caracteres. Além disso, aprendemos como percorrer os iteradores enquanto os combinamos usando a função zip(). Finalmente, um método simples para resolver este problema sem o uso de quaisquer funções integradas foi demonstrado utilizando o operador módulo (%).

Artigos relacionados: