En 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.
Tabla de contenido
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. Así que deberíamos devolver Falso.
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
- Si omite start, el segmento comienza al principio de la cadena.
- Si no especifica el índice de parada, 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.
Así que
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 río.
is_palindrome("river") False
Y como puede ver, devuelve False, lo cual 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:
- Recorra str_list, llame a is_palindrome() en cada cadena.
- Si is_palindrome() devuelve True, agregue la cadena a la lista de palíndromos.
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 Contador del módulo itertools. los Encimera El objeto devuelve un diccionario de Python: con los caracteres como claves y los recuentos correspondientes como valores.
Considere las cadenas «guardar» y «florero» 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 palabra1 y palabra2. En el cuerpo de la función, comprobamos si Contador(palabra1) == Contador(palabra2).
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 «debajo» son anagramas y la función are_anagrams() devuelve True.
- Y «estado» y «probado» no son anagramas, y la función devuelve Falso.
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 incorporado istitle(), que verifica si una cadena está en el caso del título.
- 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 nombre 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 Verdadero, 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 las 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!🎉