Programas Python em Operações de String

Publicados: 2022-04-26

Neste tutorial, você escreverá programas em Python para resolver perguntas frequentes sobre operações de string .

Você aprenderá como verificar se as strings do Python são palíndromos , anagramas e estão no título .

Strings Python: Uma Revisão Rápida

Em Python, strings são poderosos tipos de dados integrados. Eles podem armazenar uma sequência de caracteres.

Indexação em Strings do Python: Como todos os iteráveis ​​do Python, as strings também são indexadas a zero. Portanto, os índices válidos para uma string de comprimento N são 0, 1, 2 até N – 1.

python-strings

Python também suporta indexação negativa para acessar elementos do final da string. Então -1 é o índice do último caractere na string, -2 é o índice do penúltimo caractere na string e assim por diante.

Imutabilidade das Strings do Python : Além disso, as strings do Python são imutáveis, portanto, você não pode modificá-las no local. No entanto, você pode chamar vários métodos de string neles e obter cópias de strings com o resultado desejado.

Agora que revisamos o básico das strings do Python, vamos resolver alguns problemas simples, mas interessantes.

Vamos começar.

Verifique se uma string Python é um palíndromo

Problema : Dada uma string Python, verifique se é ou não um palíndromo.

Se sim, retorne True; caso contrário, retorne False.

Portanto, nosso primeiro problema é verificar se uma determinada string é ou não um palíndromo.

Um palíndromo é uma string que lê o mesmo da esquerda para a direita, bem como da direita para a esquerda. Vamos listar alguns exemplos: carro de corrida, referência, nível, madame, radar e assim por diante.

python-string-palíndromo

Aqui estão os passos para resolver este problema:

  • Obtenha uma cópia invertida da string e armazene-a em outra variável, se necessário.
  • Compare os valores da string original e da string invertida.
  • Se forem iguais, a string é um palíndromo. Então retorne True e pare.
  • Se as cópias original e invertida não forem iguais, a string não é um palíndromo. Então devemos retornar False .

A operação de chave é obter uma cópia invertida da string. Em Python, existem algumas maneiras diferentes de fazer isso.

No entanto, vamos passar por duas abordagens:

  • Usando fatiamento de string
  • Usando a função reversed() e o método join()

Como reverter uma string Python usando Slicing

A sintaxe <any_str>[start: stop: step] retorna uma fatia da string <any_str> de start até mas sem incluir stop , com step size step .

  • Se você omitir start , a fatia começará no início da string.
  • Se você não especificar o índice de stop , a fatia se estenderá até o final da string.
  • E valores negativos de step podem ser usados ​​para retornar fatias a partir do final da string.

Então <any_str>[::-1] retorna uma cópia invertida da string.

A célula de código a seguir contém a definição da função is_palindrome() .

Ele recebe uma string como argumento e retorna True ou False dependendo se é ou não um palíndromo.

Aqui, usamos o fatiamento de string para obter uma cópia reversa da string.

 def is_palindrome(this_str): rev_str = this_str[::-1] if (this_str == rev_str): return True else: return False

️ Agora que definimos a função, podemos prosseguir e chamar com qualquer string válida como argumento.

 is_palindrome("racecar") True

Na célula de código acima, o carro de racecar é um palíndromo. Portanto, a função is_palindrome() retorna True conforme o esperado.

Agora, tente chamar a função com qualquer string que não seja um palíndromo, como river .

 is_palindrome("river") False

E como você pode ver, ele retorna False , o que está correto.

Como reverter uma string Python usando reversed() e join()

Em Python, você pode usar o método join() junto com a função reversed() para reverter uma string.

  • A função reversed() retorna um iterador reverso por meio dos caracteres na string.
  • O método join() pode então ser usado para unir esses caracteres na ordem inversa.

Usando o método acima, você pode reescrever a função is_palindrome() como na célula de código abaixo.

 def is_palindrome(this_str): rev_str = ''.join(reversed(this_str)) if (this_str == rev_str): return True else: return False

Você também pode usar a função is_palindrome() dentro da compreensão da lista para coletar todos os palíndromos de uma lista mais longa de strings.

 str_list = ["refer","blue","level","12321","dragon"] palindromes = [string for string in str_list if is_palindrome(string)] print(palindromes) # Output ['refer', 'level', '12321']

Veja como o código acima funciona:

  • Percorra str_list , chame is_palindrome() em cada string.
  • Se is_palindrome() retornar True , adicione a string à lista de palindromes .

Como você pode ver na saída acima, palindromes é uma lista de todas as strings palindrômicas em str_list .

Verifique se duas strings Python são anagramas

Outra pergunta popular que você pode encontrar em entrevistas é verificar se um par de strings str1 e str2 são ou não anagramas.

Duas strings são chamadas de anagramas se a contagem dos caracteres nas duas strings for exatamente a mesma. Isso significa que você pode obter uma das strings permutando ou reorganizando os caracteres na outra string.

Exemplos de anagramas incluem estado-gosto, salvar-vaso, cotovelo-abaixo e assim por diante.

python-strings-anagrams

Como verificar anagramas usando Counter Object em Python

Uma maneira simples e intuitiva é calcular o número de ocorrências de cada caractere nas duas strings. E, em seguida, verifique se as contagens são iguais.

Isso pode ser feito ainda mais facilmente usando o objeto Counter do módulo itertools . O objeto Counter retorna um dicionário Python: com os caracteres como as chaves e as contagens correspondentes como os valores .

Considere as strings "save" e "vase" como mostrado abaixo.

 str1 = "save" str2 = "vase"

Aqui, c1 e c2 são objetos de contador contendo as contagens de caracteres das strings str1 e str2 respectivamente.

 from collections import Counter c1 = Counter(str1) c2 = Counter(str2) print(c1) print(c2) c1 == c2 # Output Counter({'s': 1, 'a': 1, 'v': 1, 'e': 1}) Counter({'v': 1, 'a': 1, 's': 1, 'e': 1}) True

c1 == c2 retorna True como str1 e str2 são anagramas.

Usando essa lógica, agora podemos seguir em frente e definir a função are_anagrams() com dois parâmetros word1 e word2 . No corpo da função, verificamos se Counter(word1) == Counter(word2) .

 def are_anagrams(word1, word2): if Counter(word1) == Counter(word2): return True else: return False

️ Para verificar, chame are_anagrams() com str1 , str2 como argumentos. Como str1 e str2 são anagramas (“save” e “vase”), a função retorna True , o que está correto.

 are_anagrams(str1, str2) True

Como verificar anagramas usando cópias classificadas de strings

Existe outra maneira de fazer isso.

Se duas strings são anagramas, suas cópias ordenadas são iguais.

Assim, podemos reescrever a função are_anagrams() para verificar se a versão classificada de str1 é a mesma que a cópia classificada de str2 . Se forem iguais, então as duas strings são anagramas; caso contrário, eles não são.

Usando o método acima para verificar a igualdade de cópias ordenadas, podemos reescrever a função are_anagrams() da seguinte forma.

 def are_anagrams(word1, word2): if sorted(word1) == sorted(word2): return True else: return False

Vamos agora fazer algumas chamadas de função.

  • As strings “elbow” e “below” são anagramas e a função are_anagrams() retorna True .
  • E “state” e “tasted” não são anagramas, e a função retorna False .
 are_anagrams("below","elbow") True are_anagrams("state","tasted") False

Verifique se uma string Python está em maiúsculas

Aqui está nossa pergunta final para este tutorial.

Problema : Dada uma string: o nome de uma pessoa—com nome e sobrenome.

Você deve verificar se a primeira letra do nome e do sobrenome estão em maiúscula.

Esse tipo de caixa em que a primeira letra de cada palavra é maiúscula é chamada de caixa de título .

Então você tem que verificar se o nome está em maiúsculas:

1. Se sim, emita uma mensagem informando que a formatação está em maiúsculas e minúsculas.

2. Caso contrário, retorne uma cópia da string formatada em maiúsculas e minúsculas

python-string-title-case
  • O Python tem um método de string istitle() , que verifica se uma string está na caixa do título.

<str>.istitle() retornará True se a string <str> for formatada em maiúsculas, caso contrário retornará False .

  • E o método de string title() do Python retorna uma cópia da string formatada em maiúsculas e minúsculas.

Então agora você pode usar esses dois métodos para resolver o problema.

Defina uma função check_titlecase() que aceite name como argumento.

  • Você pode chamar o método istitle() na string de entrada para verificar se ela está formatada em maiúsculas e minúsculas.
  • Se True , você pode imprimir que a string já está em maiúsculas.
  • Caso contrário, você pode chamar o método title() e retornar uma cópia da string no título.

A célula de código a seguir mostra a definição da função check_titlecase() .

 def check_titlecase(name): if name.istitle(): print(f"'{name}' is already formatted in title case.") else: return name.title()

Vamos agora chamar o método check_titlecase() com um argumento.

 check_titlecase("jane smith") # Output Jane Smith

Na saída acima, você pode ver que a string “Jane Smith” agora está no título.

️ Vamos dar outro exemplo.

 check_titlecase("agatha Christie") # Output Agatha Christie

Desta vez, vamos chamar a função com uma string em maiúsculas.

 check_titlecase("Grace Hopper") # Output 'Grace Hopper' is already formatted in title case.

Somos notificados de que a string está formatada em maiúsculas e a função funciona conforme o esperado.

Conclusão

Agora vamos resumir os problemas que discutimos até agora.

  • Para verificar se uma string é um palíndromo, verifique se a string e sua versão invertida são iguais. Você pode usar o fatiamento de strings ou métodos integrados para reverter strings.
  • Para verificar se duas strings são anagramas, verifique se suas cópias ordenadas são iguais. E para classificar uma string, use a função integrada sorted() .
  • Para verificar se um nome está em maiúsculas e minúsculas, use o método .istitle() para verificação e o método .title() para obter uma cópia em maiúsculas e minúsculas da string.

Espero que você tenha gostado deste tutorial sobre strings Python. Como próximo passo, aprenda a usar compreensões de lista em Python ou aprenda sobre o operador não igual em Python.

Boa aprendizagem e codificação!