Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

En este tutorial, escribirá programas en Python para resolver preguntas frecuentes sobre operaciones con cadenas.

Aprenderá a comprobar si las cadenas de Python son palíndromos, anagramas y están en mayúsculas y minúsculas.

Cadenas en Python: Un repaso rápido

En Python, las cadenas son potentes tipos de datos incorporados. Pueden almacenar una secuencia de caracteres.

Indexación en Python Strings: Como todos los iterables de Python, las cadenas también tienen índice cero. Así, los índices válidos para una cadena de longitud N son 0, 1, 2 hasta N - 1.

cadenas-python

Python también admite la indexación negativa para acceder a los elementos desde el final de la cadena. Así, -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 en Python: Además, las cadenas en Python son inmutables, por lo que no puede modificarlas in situ. Sin embargo, puede llamar a varios métodos de cadenas sobre ellas y obtener copias de cadenas con el resultado deseado.

Ahora que hemos repasado los fundamentos de las cadenas de Python, procedamos a resolver algunos problemas sencillos pero interesantes.

Empecemos.

Comprobar si una cadena Python es un palíndromo

Problema: Dada una cadena Python, compruebe si es o no un palíndromo.

En caso afirmativo, devuelva True; en caso contrario, devuelva False.

Así que nuestro primer problema es comprobar si una cadena dada es o no un palíndromo.

Un palíndromo es una cadena que se lee igual tanto de izquierda a derecha como de derecha a izquierda. Enumeremos algunos ejemplos: coche de carreras, refer, nivel, señora, radar, etc.

python-string-palíndromo

He aquí los pasos para resolver este problema:

  • Obtenga una copia invertida de la cadena y guárdela en otra variable, si es necesario.
  • Compare los valores de la cadena original y de la cadena invertida.
  • Si son iguales, la cadena es un palíndromo. Entonces devuelva True y deténgase.
  • Si las copias original e invertida no son iguales, la cadena no es un palíndromo. Entonces debemos devolver Falso.

La operación clave es obtener una copia invertida de la cadena. En Python, hay varias formas de hacerlo.

Sin embargo, vamos a repasar dos enfoques:

  • Utilizando el troceado de cadenas
  • Utilizando la función invertido() y el método join()

Cómo invertir una cadena en Python utilizando el rebanado

La sintaxis <cualquier_cadena> [inicio: parada: paso] devuelva una rebanada de la cadena <cualquier_cadena> desde el inicio hasta la parada, pero sin incluirla, con el tamaño de paso paso.

  • Si omite inicio, la rebanada comienza al principio de la cadena.
  • Si no especifica el índice stop, la rebanada se extiende hasta el final de la cadena.
  • Y se pueden utilizar valores negativos de paso para devolver rebanadas que empiecen desde el final de la cadena.

Así, <cualquier_cadena>[::-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 Verdadero o Falso dependiendo de si es o no un palíndromo.

Aquí hemos utilizado el troceado 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 seguir adelante y llamarla con cualquier cadena válida como argumento.

is_palindrome("racecar")
True

En la celda de código anterior, racecar es un palíndromo. Así que la función is_palíndromo () devuelva 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 en Python utilizando reversed() y join()

En Python, puede utilizar el método join ( ) junto con la función invertida ( ) para invertir una cadena.

  • La función reversed () devuelve un iterador inverso a través de los caracteres de la cadena.
  • A continuación, puede utilizar el método join () para unir esos caracteres en el orden inverso.

Utilizando el método anterior, puede reescribir la función is_palindrome ( ) como en la celda de código siguiente.

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

También puede utilizar la función is_palindrome() dentro de la comprensión de listas para recoger todos los palíndromos de una lista más larga de cadenas.

str_list = ["refer", "azul", "nivel", "12321", "dragón"]

palíndromos = [cadena para cadena en str_list if is_palíndromo(cadena)]
print(palíndromos)
# Salida
['refer', 'nivel', '12321']

Así es como funciona el código anterior

  • Recorra str_list, llame a is_palindrome ( ) en cada cadena.
  • Si is_palindrome () devolver True, añada la cadena a la lista de palíndromos.

Como puede ver en la salida anterior, palíndromos es una lista de todas las cadenas palindrómicas de str_list.

Comprobar si dos cadenas de Python son anagramas

Otra pregunta popular que puede encontrarse en las entrevistas es comprobar si un par de cadenas str1 y str2 son o no anagramas.

Se dice que dos cadenas son anagramas si los recuentos de los caracteres de las dos cadenas son exactamente iguales. Esto significa que se puede obtener una de las cadenas permutando o reordenando los caracteres de la otra cadena.

Algunos ejemplos de anagramas son estado-gusto, guardar-vaso, codo-abajo, etc.

python-strings-anagrams

Cómo buscar anagramas utilizando el objeto contador en Python

Una forma sencilla e intuitiva es calcular el número de apariciones de cada carácter en las dos cadenas. Y luego comprobar si los recuentos son iguales.

Esto puede hacerse más fácilmente utilizando el objeto Contador del módulo itertools. El objeto Contador devuelve un diccionario Python: con los caracteres como claves y los recuerdos correspondientes como valores.

Considere las cadenas "guardar" y "jarrón " como se muestra a continuación.

str1 = "save"
str2 = "vase"

Aquí, c1 y c2 son objetos contadores que contienen los recuentos de caracteres de las cadenas str1 y str2 respectivamente.

from colecciones import Contador
c1 = Contador(cadena1)
c2 = Contador(cadena2)
print(c1)
print(c2)
c1 == c2

# Salida
Contador({'s': 1, 'a': 1, 'v': 1, 'e': 1})
Contador({'v': 1, 'a': 1, 's': 1, 'e': 1})
Verdadero

c1 == c2 devuelva Verdadero ya que str1 y str2 son anagramas.

Utilizando esta lógica, ahora podemos seguir adelante y definir la función are_anagrams() con dos parámetros word1 y word2. En el cuerpo de la función, comprobamos si Contador(palabra1) == Contador(palabra2).

def are_anagrams(palabra1, palabra2):
 if Contador(palabra1) == Contador(palabra2):
 return Verdadero
 else:
 return Falso

▶️ Para verificarlo, llame a are_anagrams() con str1, str2 como argumentos. Como str1 y str2 son anagramas ("guardar" y "jarrón"), la función devuelve True, lo que es correcto.

are_anagrams(str1, str2)
True

Cómo comprobar si hay anagramas utilizando copias ordenadas de cadenas

Hay otra forma de hacerlo.

Si dos cadenas son anagramas, entonces sus copias ordenadas son iguales.

Así que podemos reescribir la función are_anagrams() para comprobar 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; en caso contrario, no lo son.

Utilizando el método anterior para comprobar la igualdad de las copias ordenadas, podemos reescribir la función are_anagrams() como sigue.

def are_anagrams(palabra1, palabra2):
 if ordenada(palabra1) == ordenada(palabra2):
 return True
 else:
 return False

Hagamos ahora algunas llamadas a funciones.

  • Las cadenas "codo" y "abajo" son anagramas y la función are_anagrams() devuelva True.
  • 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 Python está en mayúsculas y minúsculas

He aquí nuestra última pregunta para este tutorial.

Problema: Dada una cadena: el nombre y apellidos de una persona.

Tiene que comprobar si la primera letra tanto del nombre como del apellido están en mayúsculas.

Este tipo de mayúsculas en el que la primera letra de cada palabra está en mayúscula se denomina mayúsculas y minúsculas.

Así que tiene que comprobar si el nombre está en mayúscula inicial:

1. En caso afirmativo, emita un mensaje indicando que el formato está en mayúsculas y minúsculas.

2. Si no, devuelva una copia de la cadena formateada en el title case

python-string-title-case
  • Python tiene un método incorporado para cadenas, istitle(), que comprueba si una cadena está en el caso del título.

<str>.istitle() devuelva True si la cadena <str> está formateada en el caso del título, de lo contrario devuelve False.

  • Y el método de Python para cadenas title () devuelve una copia de la cadena formateada en el caso del título.

Así que ahora puede utilizar estos dos métodos para resolver el problema.

Define una función check_titlecase () que acepte nombre como argumento.

  • Puede llamar al método istitle () sobre 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.
  • Si no, 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 comprobar_titular(nombre):
 if nombre.estitular():
 print(f"'{nombre}' ya está formateado en mayúsculas y minúsculas.")
 else:
 return nombre.titular()

Llamemos ahora al método check_titlecase ( ) con un argumento.

check_titlecase("jane smith")

# Salida
Jane Smith

En la salida anterior, puede ver que la cadena "Jane Smith" está ahora en mayúsculas y minúsculas.

▶️ Veamos otro ejemplo.

check_titlecase("agatha Christie")

# Salida
Agatha Christie

Esta vez, llamemos a la función con una cadena en mayúsculas y minúsculas.

check_titlecase("Grace Hopper")

# Salida
'Grace Hopper' ya está formateada en mayúsculas y minúsculas.

Se nos notifica que la cadena está formateada en el caso del título, y la función funciona como se esperaba.

Conclusión 👩‍🏫

Ahora vamos a resumir 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 troceado de cadenas o métodos incorporados para invertir cadenas.
  • Para comprobar si dos cadenas son anagramas, compruebe si sus copias ordenadas son iguales. Y para ordenar una cadena, utilice la función incorporada ordenado().
  • Para comprobar si un nombre está en mayúsculas y minúsculas, utilice el método . istitle () para comprobarlo y el método .title() para obtener una copia en mayúsculas y minúsculas de la cadena.

Espero que haya disfrutado de este tutorial sobre cadenas en Python. Como siguiente paso, aprenda a utilizar las comprensiones de listas en Python o aprenda sobre el operador no igual en Python.

Feliz aprendizaje y codificación!🎉

  • Bala Priya C
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder