Programas de Python en operaciones con cadenas
Publicado: 2022-04-26En este tutorial, escribirá programas en Python para resolver preguntas frecuentes sobre operaciones con cadenas .
Aprenderá cómo verificar si las cadenas de Python son palíndromos , anagramas y están en el caso del título .
Cadenas de Python: una revisión rápida
En Python, las cadenas son poderosos tipos de datos integrados. Pueden almacenar una secuencia de caracteres.
Indexación en cadenas de Python: como todos los iterables de Python, las cadenas también están indexadas a cero. Entonces, los índices válidos para una cadena de longitud N son 0, 1, 2 hasta N – 1.
Python también admite la indexación negativa para acceder a elementos desde el final de la cadena. Entonces, -1 es el índice del último carácter de la cadena, -2 es el índice del penúltimo carácter de la cadena, y así sucesivamente.
Inmutabilidad de las cadenas de Python : además, las cadenas de Python son inmutables, por lo que no puede modificarlas en su lugar. Sin embargo, puede llamar a varios métodos de cadena en ellos y obtener copias de cadenas con el resultado deseado.
Ahora que hemos revisado los conceptos básicos de las cadenas de Python, procedamos a resolver algunos problemas simples pero interesantes.
Empecemos.
Comprobar si una cadena de Python es un palíndromo
Problema : dada una cadena de Python, verifique si es o no un palíndromo.
En caso afirmativo, devuelva Verdadero; de lo contrario, devuelve Falso.
Así que nuestro primer problema es verificar si una cadena dada es o no un palíndromo.
Un palíndromo es una cadena que se lee igual de izquierda a derecha que de derecha a izquierda. Enumeremos algunos ejemplos: coche de carreras, referencia, nivel, señora, radar, etc.
Estos son los pasos para resolver este problema:
- Obtenga una copia invertida de la cadena y guárdela en otra variable, si es necesario.
- Compara los valores de la cadena original y la cadena invertida.
- Si son iguales, la cuerda es un palíndromo. Así que devuelve True y detente.
- Si las copias original e invertida no son iguales, la cuerda no es un palíndromo. Entonces deberíamos devolver False .
La operación clave es obtener una copia invertida de la cadena. En Python, hay algunas formas diferentes de hacer esto.
Sin embargo, repasaremos dos enfoques:
- Usando el corte de cuerdas
- Usando la función invertida() y el método join()
Cómo invertir una cadena de Python usando Slicing
La sintaxis <any_str>[start: stop: step]
stop
un segmento de la cadena <any_str>
desde el start
hasta el final, pero sin incluirlo, con un tamaño de step
.
- Si omite
start
, el segmento comienza al principio de la cadena. - Si no especifica el índice de
stop
, el segmento se extiende hasta el final de la cadena. - Y los valores negativos de
step
se pueden usar para devolver segmentos a partir del final de la cadena.
Entonces <any_str>[::-1]
devuelve una copia invertida de la cadena.
La siguiente celda de código contiene la definición de la función is_palindrome()
.
Toma una cadena como argumento y devuelve True
o False
dependiendo de si es o no un palíndromo.
Aquí, hemos utilizado el corte de cadenas para obtener una copia inversa de la cadena.
def is_palindrome(this_str): rev_str = this_str[::-1] if (this_str == rev_str): return True else: return False
️ Ahora que hemos definido la función, podemos continuar y llamar con cualquier cadena válida como argumento.
is_palindrome("racecar") True
En la celda de código anterior, racecar
es un palíndromo. Entonces la función is_palindrome()
devuelve True
como se esperaba.
Ahora, intente llamar a la función con cualquier cadena que no sea un palíndromo, como river
.
is_palindrome("river") False
Y como puede ver, devuelve False
, que es correcto.
Cómo invertir una cadena de Python usando reversed() y join()
En Python, puede usar el método join()
junto con la función reversed()
para invertir una cadena.
- La función
reversed()
devuelve un iterador inverso a través de los caracteres de la cadena. - El método
join()
se puede usar para unir esos caracteres en el orden inverso.
Usando el método anterior, puede reescribir la función is_palindrome()
como en la celda de código a continuación.
def is_palindrome(this_str): rev_str = ''.join(reversed(this_str)) if (this_str == rev_str): return True else: return False
También puede usar la función is_palindrome()
dentro de la comprensión de listas para recopilar todos los palíndromos de una lista más larga de cadenas.
str_list = ["refer","blue","level","12321","dragon"] palindromes = [string for string in str_list if is_palindrome(string)] print(palindromes) # Output ['refer', 'level', '12321']
Así es como funciona el código anterior:
-
str_list
, llame ais_palindrome()
en cada cadena. - Si
is_palindrome()
devuelveTrue
, agregue la cadena a la lista depalindromes
.
Como puede ver en el resultado anterior, palindromes
es una lista de todas las cadenas palindrómicas en str_list
.
Comprobar si dos cadenas de Python son anagramas
Otra pregunta popular que puede encontrar en las entrevistas es verificar si un par de cadenas str1
y str2
son anagramas o no.
Se dice que dos cadenas son anagramas si el número de caracteres en las dos cadenas es exactamente el mismo. Esto significa que puede obtener una de las cadenas permutando o reorganizando los caracteres de la otra cadena.
Los ejemplos de anagramas incluyen state-taste, save-vase, elbow-below, etc.
Cómo buscar anagramas usando el objeto de contador en Python
Una forma simple e intuitiva es calcular el número de ocurrencias de cada carácter en las dos cadenas. Y luego verifique si los conteos son iguales.
Esto se puede hacer más fácilmente utilizando el objeto Counter
del módulo itertools
. El objeto Counter devuelve un diccionario de Python: con los caracteres como claves y los recuentos correspondientes como valores .
Considere las cadenas "save"
y "vase"
como se muestra a continuación.
str1 = "save" str2 = "vase"
Aquí, c1
y c2
son objetos de contador que contienen los recuentos de caracteres de las cadenas str1
y 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
devuelve True
ya que str1
y str2
son anagramas.
Usando esta lógica, ahora podemos continuar y definir la función are_anagrams()
con dos parámetros word1
y word2
. En el cuerpo de la función, comprobamos si Counter(word1) == Counter(word2)
.
def are_anagrams(word1, word2): if Counter(word1) == Counter(word2): return True else: return False
️ Para verificar, llama a are_anagrams()
con str1
, str2
como argumentos. Como str1
y str2
son anagramas ("guardar" y "jarrón"), la función devuelve True
, lo cual es correcto.
are_anagrams(str1, str2) True
Cómo buscar anagramas usando copias ordenadas de cadenas
Hay otra manera de hacer esto.
Si dos cadenas son anagramas, entonces sus copias ordenadas son iguales.
Entonces, podemos reescribir la función are_anagrams()
para verificar si la versión ordenada de str1
es la misma que la copia ordenada de str2
. Si son iguales, entonces las dos cadenas son anagramas; de lo contrario, no lo son.
Usando el método anterior para verificar la igualdad de las copias ordenadas, podemos reescribir la función are_anagrams()
de la siguiente manera.
def are_anagrams(word1, word2): if sorted(word1) == sorted(word2): return True else: return False
Hagamos ahora algunas llamadas a funciones.
- Las cadenas "codo" y "abajo" son anagramas y la función
are_anagrams()
devuelveTrue
. - Y "estado" y "probado" no son anagramas, y la función devuelve
False
.
are_anagrams("below","elbow") True are_anagrams("state","tasted") False
Comprobar si una cadena de Python está en mayúsculas y minúsculas
Aquí está nuestra pregunta final para este tutorial.
Problema : dada una cadena: el nombre de una persona, con nombre y apellido.
Debe verificar si la primera letra del nombre y el apellido están en mayúscula.
Este tipo de mayúsculas y minúsculas en las que la primera letra de cada palabra se escribe en mayúsculas se denomina caso de título .
Así que tienes que comprobar si el nombre está en mayúsculas y minúsculas:
1. En caso afirmativo, envíe un mensaje de que el formato está en mayúsculas y minúsculas.
2. De lo contrario, devuelva una copia de la cadena formateada en el caso del título
- Python tiene un método de cadena
istitle()
, que verifica si una cadena está en el caso del título.
<str>.istitle()
devuelveTrue
si la cadena<str>
está formateada en el caso del título, de lo contrario, devuelveFalse
.
- Y el método de cadena
title()
de Python devuelve una copia de la cadena formateada en el caso del título.
Así que ahora puedes usar estos dos métodos para resolver el problema.
Defina una función check_titlecase()
que acepte el name
como argumento.
- Puede llamar al método
istitle()
en la cadena de entrada para comprobar si está formateada en mayúsculas y minúsculas. - Si es
True
, puede imprimir que la cadena ya está en mayúsculas y minúsculas. - De lo contrario, puede llamar al método
title()
y devolver una copia de la cadena en el caso del título.
La siguiente celda de código muestra la definición de la función check_titlecase()
.
def check_titlecase(name): if name.istitle(): print(f"'{name}' is already formatted in title case.") else: return name.title()
Llamemos ahora al método check_titlecase()
con un argumento.
check_titlecase("jane smith") # Output Jane Smith
En el resultado anterior, puede ver que la cadena "Jane Smith" ahora está en el caso del título.
️ Tomemos otro ejemplo.
check_titlecase("agatha Christie") # Output Agatha Christie
Esta vez, llamemos a la función con una cadena en mayúsculas y minúsculas.
check_titlecase("Grace Hopper") # Output 'Grace Hopper' is already formatted in title case.
Recibimos una notificación de que la cadena está formateada en el caso del título y la función funciona como se esperaba.
Conclusión
Ahora resumamos los problemas que hemos discutido hasta ahora.
- Para comprobar si una cadena es un palíndromo, compruebe si la cadena y su versión invertida son iguales. Puede utilizar el corte de cadenas o métodos integrados para invertir las cadenas.
- Para comprobar si dos cadenas son anagramas, compruebe si sus copias ordenadas son iguales. Y para ordenar una cadena, use la función sorted() incorporada.
- Para verificar si un nombre está en mayúsculas y minúsculas, use el método .istitle() para verificar y el método .title() para obtener una copia de la cadena en mayúsculas y minúsculas.
Espero que hayas disfrutado este tutorial sobre cadenas de Python. Como siguiente paso, aprenda a usar la comprensión de listas en Python o aprenda sobre el operador no igual en Python.
¡Feliz aprendizaje y codificación!