Programas Python em Operações de String
Publicados: 2022-04-26Neste 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 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.
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
, chameis_palindrome()
em cada string. - Se
is_palindrome()
retornarTrue
, adicione a string à lista depalindromes
.
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.
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()
retornaTrue
. - 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
- 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!