Saltar a contenido

Uso de métodos de cadenas de caracteres

Las cadenas de caracteres en Python son objetos inmutables, lo que significa que no se pueden modificar una vez que han sido creadas. Sin embargo, Python proporciona una serie de métodos que permiten realizar otras operaciones, además de las ya vistas, sobre las cadenas de caracteres sin modificar la cadena original.

Un método es una función que se aplica a un objeto. En Python, los métodos de cadena de caracteres se aplican a objetos de tipo cadena de caracteres (str por string en inglés) y se utilizan para realizar operaciones específicas sobre la cadena de caracteres.

Antes de empezar a conocer estas operaciones, o durante tu recorrido por esta sección, puedes consultar la lista completa de métodos de cadena de caracteres en la documentación oficial de Python sobre métodos de cadenas de caracteres.

¡Para recordar!

Para utilizar un método de cadena de caracteres, se debe llamar al método sobre la cadena de caracteres y pasar los argumentos necesarios.

Por ejemplo, si se tiene una cadena de caracteres cadena y se desea convertir todas las letras a minúsculas, se puede utilizar el método strip() de la siguiente manera: cadena.strip(). Analizaremos como funciona este método en un instante.

¿Podemos confiar en la entrada del usuario?

Cuando programamos aplicaciones, sitios web o cualquier otro tipo de software, no podemos confiar en que los usuarios escriban lo que queremos que escriban. Por ejemplo, los usuarios

  • pueden presionar la barra espaciadora accidentalmente al principio o al final de su entrada generando espacios adicionales innecesarios,
  • escribir todo en minúsculas o no usar mayúsculas como debieran por estar apurados, o simplemente porque no les importa,
  • no controlar la gramática y, aunque en una carta formal podrían escribir correctamente, en un mensaje casual van a tender a escribir todo en minúsculas y seguramente sin reparar en los signos de puntuación correspondiente,
  • etcétera.

Por ejemplo, si le pido a un usuario que ingrese su nombre, y el usuario ingresa su nombre en minúsculas, no se verá muy bien. Si el usuario ingresa su nombre con espacios adicionales al principio o al final, tampoco se verá muy bien. Si el usuario no usa mayúsculas, tampoco se verá muy bien. Si el usuario no usa signos de puntuación, tampoco se verá muy bien:

Python
nombre = input("Ingrese su nombre: ")
print(f"Hola, {nombre}!")

La salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese su nombre:           pablo    _ (recuerda que _ representa el cursor en la Terminal virtual) 
Hola,           pablo    !

En este caso, el usuario ingresó su nombre en minúsculas y con espacios adicionales al principio y al final, lo que no se ve muy bien. ¿Por qué? No es que no sepa cómo escribir su nombre, sino que simplemente no estaba prestando atención. Y eso es algo que sucede todo el tiempo.

Acceder a los métodos de las cadenas de caracteres

Por suerte, resulta que las cadenas de texto cuentan, en su tipo de dato str, con muchas funciones integradas para hacer más que simplemente unirlas como ya hemos visto: Hola++Mundo se concatenará como Hola Mundo.

Podemos limpiar o reformatear una cadena de caracteres de manera tal que se vea como nosotros queremos o precisamos:

Python
nombre = input("Ingrese su nombre: ")

# Elimina los espacios en blanco al principio y al final de la cadena de caracteres
nombre = nombre.strip()

# Convierte la primera letra de la cadena en mayúscula y el resto en minúsculas
nombre = nombre.capitalize()

# Saluda al usuario con la cadena de caracteres reformateada
print(f"Hola, {nombre}!")

nombre.strip() elimina los espacios en blanco al principio y al final de la cadena de caracteres. nombre.capitalize() convierte la primera letra de la cadena de caracteres en mayúscula y el resto en minúsculas.

La salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese su nombre:           pablo      _
Hola, Pablo!

¡Para recordar!

Las funciones de una cadena de caracteres por ser esta un objeto, en realidad son métodos que nos permiten manipularlas de diversas maneras.

En nuestro ejemplo, hemos utilizado dos métodos de cadena de caracteres: strip() y capitalize(). Ambos métodos son llamados sobre la variable nombre y no modifican la cadena original, sino que devuelven una nueva cadena de caracteres con las modificaciones realizadas.

¡Para recordar!

Las cadenas de caracteres en Python son objetos inmutables, lo que significa que no se pueden modificar una vez que han sido creadas. Fíjate que en el código anterior, la variable nombre se reasigna en cada línea, pero no se modifica la cadena original.

Analicemos las líneas de código 4 y 7.

Métodos que modifican una cadena de caracteres

.strip() / .lstrip() / .rstrip()

Python
# Elimina los espacios en blanco al principio y al final de la cadena de caracteres
nombre = nombre.strip()

En la línea 4, se llama al método strip() sobre la variable nombre para eliminar los espacios en blanco al principio y al final de la cadena de caracteres.

¿Existe alguna manera de eliminar los espacios innecesarios entre las palabras de una cadena de caracteres, y no solo al inicio o al final de esta?

La respuesta corta es no. strip() elimina los espacios a la izquierda del primer caracter que no es espacio y a la derecha del último caracter que no es espacio, pero no en el medio.

De hecho, hay otras dos funciones, rstrip() y lstrip(), que te permiten eliminar los espacios solo a un lado o al otro de la cadena.

Si quisiéramos deshacernos de los espacios innecesarios en el medio de la cadena, debiéramos aplicarle un tratamiento específico a la cadena para poder cumplir con nuestro objetivo.

También es posible eliminar caracteres específicos al principio y al final de una cadena de caracteres utilizando el método strip() con un argumento opcional que indica los caracteres a eliminar.

Supongamos la siguiente cadena:

Python
saludo = "¡¡¡¿Hola, Mundo?!!!"

Si quisiéramos eliminar todos los símbolos de exclamación y de interrogación al principio y al final de la cadena de caracteres, podríamos hacerlo de la siguiente manera:

Python
saludo = "¡¡¡¿Hola, Mundo?!!!"

# Elimina los caracteres de exclamación y de interrogación al principio y al final de la cadena de caracteres
saludo = saludo.strip("¡!¿?")
print(saludo)

La salida en la Terminal será:

Terminal (Entrada/Salida)
Hola, Mundo

¡Para recordar!

Los métodos strip(), lstrip() y rstrip() permiten eliminar los espacios en blanco al principio y al final de una cadena de caracteres, o solo al principio o al final, respectivamente.

También es posible eliminar caracteres específicos al principio y al final de una cadena de caracteres utilizando el método strip() con un argumento opcional que indica los caracteres a eliminar. En este caso, no importa el orden en que se encuentren los caracteres en el argumento, ya que se eliminarán todos los caracteres especificados al principio y al final de la cadena de caracteres.

En todos los casos, los métodos devuelven una copia de la cadena con las modificaciones realizadas, sin modificar la cadena original.

.strip(["caracteres"])

Devuelve una copia de la cadena con los espacios en blanco al principio y al final eliminados.

Si caracteres está presente en lugar de None, elimina los caracteres especificados al principio y al final de la cadena de caracteres.

.lstrip(["caracteres"])

Devuelve una copia de la cadena con los espacios en blanco al principio eliminados.

Si caracteres está presente en lugar de None, elimina los caracteres especificados al principio y al final de la cadena de caracteres.

.rstrip(["caracteres"])

Devuelve una copia de la cadena con los espacios en blanco al final eliminados.

Si caracteres está presente en lugar de None, elimina los caracteres especificados al principio y al final de la cadena de caracteres.

.replace()

Otro método útil es replace(), que permite reemplazar una subcadena por otra en una cadena de caracteres.

Su sintaxis es la siguiente:

Python
cadena.replace(cadena_buscada, cadena_nueva[, contador])

Donde: * cadena: Es la cadena de caracteres sobre la que se aplicará el método. * cadena_buscada: Es la subcadena que se desea reemplazar. * cadena_nueva: Es la subcadena que se utilizará para reemplazar la subcadena buscada. * contador: Es un argumento opcional que indica el número máximo de ocurrencias que serán reemplazadas. Si no se especifica, se reemplazarán todas las ocurrencias.

Veamos un ejemplo. Supongamos que estamos acostumbrados a decir pelota pero el usuario es de otro país y dice balón. Podemos reemplazar todas las apariciones de balón por pelota en la cadena de caracteres que ingrese el usuario.

Python
1
2
3
4
5
6
7
cadena = input("Ingrese una cadena de caracteres: ")

# Reemplaza todas las apariciones de "balón" por "pelota"
cadena = cadena.replace("balón", "pelota")

# Imprime la cadena de caracteres con las apariciones reemplazadas
print(cadena)

En este caso, la línea 3 llama al método replace("balón", "pelota") sobre la variable cadena para reemplazar todas las apariciones de "balón" por "pelota".

Si simulamos la entrada del usuario con la cadena de caracteres Tengo un balón de fútbol, dos balones de basquet y tres balones de voley., la salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese una cadena de caracteres: Tengo un balón de fútbol, dos balones de basquet y tres balones de voley.
Tengo un pelota de fútbol, dos pelotas de basquet y tres pelotas de voley.

Aquí se produjo el reemplazo de todas las apariciones de "balón" por "pelota" en la cadena de caracteres ingresada por el usuario.

Si hubiésemos querido cambiar solo la primera aparición de "balón" por "pelota", podríamos haber pasado un tercer argumento al método replace() indicando el número máximo de ocurrencias a reemplazar:

Python
1
2
3
4
5
6
7
cadena = input("Ingrese una cadena de caracteres: ")

# Reemplaza la primera aparición de "balón" por "pelota"
cadena = cadena.replace("balón", "pelota", 1)

# Imprime la cadena de caracteres con la primera aparición reemplazada
print(cadena)

En este caso, la línea 3 llama al método replace("balón", "pelota", 1) sobre la variable cadena para reemplazar solo la primera aparición de "balón" por "pelota".

Si simulamos la entrada del usuario con la cadena de caracteres Tengo un balón de fútbol, dos balones de basquet y tres balones de voley., la salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese una cadena de caracteres: Tengo un balón de fútbol, dos balones de basquet y tres balones de voley.
Tengo un pelota de fútbol, dos balones de basquet y tres balones de voley.

Aquí se produjo el reemplazo de solo la primera aparición de "balón" por "pelota" en la cadena de caracteres ingresada por el usuario.

.replace()

Dada la sintaxis cadena.replace(cadena_buscada, cadena_nueva[, contador]), el método replace() devuelve una copia de la cadena reemplazando todas las apariciones de la subcadena buscada por la subcadena nueva.

Si se especifica un contador, se reemplazarán solo las primeras ocurrencias.

.ljust() / .center() / .rjust()

También es posible alinear una cadena de caracteres en un campo de un ancho especificado utilizando los métodos ljust() para alinear a la izquierda, center() para alinear centrado y rjust() para alinear a la derecha.

Estos métodos tienen la siguiente sintaxis:

Python
cadena.ljust(ancho[, caracter_de_relleno])
cadena.center(ancho[, caracter_de_relleno])
cadena.rjust(ancho[, caracter_de_relleno])

Donde: * cadena: Es la cadena de caracteres sobre la que se aplicará el método. * ancho: Es el ancho del campo en el que se alineará la cadena. * caracter_de_relleno: Es el caracter que rellena los espacios adicionales hasta completar el ancho hacia la izquierda, el centro o la derecha de la cadena. Si no se especifica, se rellenan con espacios.

Los métodos ljust(), center() y rjust() devuelven una copia de la cadena alineada en un campo de un ancho especificado.

Veamos un ejemplo. Supongamos que queremos centrar la cadena "hola mundo" en un campo de 20 caracteres de ancho, rellenando los espacios hacia ambos lados de la cadena con espacios y con asteriscos.

Python
cadena = "hola mundo"

# Centra la cadena en un campo de 20 caracteres de ancho
cadena_centralizada = cadena.center(20)

# Centra la cadena en un campo de 20 caracteres de ancho, rellenando los espacios con asteriscos
cadena_centralizada_con_relleno = cadena.center(20, '*')

# Imprime la cadena centralizada y la cadena centralizada con relleno
print(cadena_centralizada)
print(cadena_centralizada_con_relleno)

La salida en la Terminal será:

Terminal (Entrada/Salida)
     hola mundo     
*****hola mundo*****

En este caso, la línea 4 llama al método center(20) sobre la variable cadena para centrar la cadena "hola mundo" en un campo de 20 caracteres de ancho, rellenando los espacios hacia ambos lados de la cadena con espacios.

La línea 7 llama al método center(20, '*') sobre la variable cadena para centrar la cadena "hola mundo" en un campo de 20 caracteres de ancho, rellenando los espacios con asteriscos en lugar de espacios.

Veamos otro ejemplo. Supongamos que queremos justificar a la izquierda la cadena "hola mundo" en un campo de 20 caracteres de ancho, rellenando los espacios hacia la derecha de la cadena con espacios y con asteriscos.

Python
cadena = "hola mundo"

# Justifica la cadena a la izquierda en un campo de 20 caracteres de ancho
cadena_justificada_izquierda = cadena.ljust(20)

# Justifica la cadena a la izquierda en un campo de 20 caracteres de ancho, rellenando los espacios con asteriscos
cadena_justificada_izquierda_con_relleno = cadena.ljust(20, '*')

# Imprime la cadena justificada a la izquierda y la cadena justificada a la izquierda con relleno
print(cadena_justificada_izquierda)
print(cadena_justificada_izquierda_con_relleno)

La salida en la Terminal será:

Terminal (Entrada/Salida)
hola mundo
hola mundo*********

En este caso, la línea 4 llama al método ljust(20) sobre la variable cadena para justificar la cadena "hola mundo" a la izquierda en un campo de 20 caracteres de ancho, rellenando los espacios hacia la derecha de la cadena con espacios.

La línea 7 llama al método ljust(20, '*') sobre la variable cadena para justificar la cadena "hola mundo" a la izquierda en un campo de 20 caracteres de ancho, rellenando los espacios con asteriscos en lugar de espacios.

Veamos un último ejemplo. Supongamos que queremos justificar a la derecha la cadena "hola mundo" en un campo de 20 caracteres de ancho, rellenando los espacios hacia la izquierda de la cadena con espacios y con asteriscos.

Python
cadena = "hola mundo"

# Justifica la cadena a la derecha en un campo de 20 caracteres de ancho
cadena_justificada_derecha = cadena.rjust(20)

# Justifica la cadena a la derecha en un campo de 20 caracteres de ancho, rellenando los espacios con asteriscos
cadena_justificada_derecha_con_relleno = cadena.rjust(20, '*')

# Imprime la cadena justificada a la derecha y la cadena justificada a la derecha con relleno
print(cadena_justificada_derecha)
print(cadena_justificada_derecha_con_relleno)

La salida en la Terminal será:

Terminal (Entrada/Salida)
         hola mundo
*********hola mundo

En este caso, la línea 4 llama al método rjust(20) sobre la variable cadena para justificar la cadena "hola mundo" a la derecha en un campo de 20 caracteres de ancho, rellenando los espacios hacia la izquierda de la cadena con espacios.

La línea 7 llama al método rjust(20, '*') sobre la variable cadena para justificar la cadena "hola mundo" a la derecha en un campo de 20 caracteres de ancho, rellenando los espacios con asteriscos en lugar de espacios.

.ljust(ancho[, caracter_de_relleno])

Devuelve una copia de la cadena justificada a la izquierda en un campo de un ancho especificado.

Si caracter_de_relleno está presente en lugar de None, rellena los espacios hacia la derecha de la cadena con el caracter especificado.

.center(ancho[, caracter_de_relleno])

Devuelve una copia de la cadena centrada en un campo de un ancho especificado.

Si caracter_de_relleno está presente en lugar de None, rellena los espacios hacia ambos lados de la cadena con el caracter especificado.

.rjust(ancho[, caracter_de_relleno])

Devuelve una copia de la cadena justificada a la derecha en un campo de un ancho especificado.

Si caracter_de_relleno está presente en lugar de None, rellena los espacios hacia la izquierda de la cadena con el caracter especificado.

.zfill()

Otro método útil es zfill(), que permite rellenar una cadena de caracteres con ceros a la izquierda hasta alcanzar una longitud especificada.

Su sintaxis es la siguiente:

Python
cadena.zfill(longitud)

Donde: * cadena: Es la cadena de caracteres sobre la que se aplicará el método. * longitud: Es la longitud de la cadena de caracteres rellenada con ceros a la izquierda.

Aquí tienes un ejemplo:

Python
cadena = "123"

cadena_con_ceros = cadena.zfill(5)
print(cadena_con_ceros)

La salida en la Terminal será:

Terminal (Entrada/Salida)
00123

En este código, cadena.zfill(5) agrega ceros al principio de la cadena "123" hasta que su longitud sea 5, resultando en "00123".

Aquí tienes otro ejemplo con un número negativo:

Python
cadena = "-123"
cadena_con_ceros = cadena.zfill(5)
print(cadena_con_ceros)

La salida en la Terminal será:

Terminal (Entrada/Salida)
-0123

En este código, cadena.zfill(5) agrega ceros después del signo '-', resultando en "-0123".

.zfill(longitud)

Devuelve una copia de la cadena rellena con ceros a la izquierda hasta alcanzar la longitud especificada.

Si la cadena ya comienza con un signo + o un signo -, el relleno de ceros se realiza después del signo.

Métodos que modifican el formato de una cadena de caracteres

.capitalize()

Python
# Convierte la primera letra de la cadena en mayúscula y el resto en minúsculas
nombre = nombre.capitalize()

En la línea 7, se llama al método capitalize() sobre la variable nombre para convertir la primera letra de la cadena de caracteres en mayúscula y el resto en minúsculas.

.capitalize()

Devuelve una copia de la cadena con la primera letra en mayúscula y el resto en minúsculas.

Llamar a estos métodos no es suficiente. Recuerda, y volvemos a hacer hincapié, que las cadenas son inmutables y por lo tanto sus métodos solo devuelven dichas cadenas reformateadas sin actualizar la cadena original por lo que si es necesario mantener el nuevo formato deberá ser asignada a una variable, por ejemplo.

Por lo tanto, no solo podemos asignar valores a las variables, sino que podemos cambiar absolutamente su valor simplemente usando el operador de asignación, el signo igual =, una y otra vez, todas las veces que sea necesario.

Recuerda que el = es un operador de asignación, no de igualdad. En este caso, estamos asignando un nuevo valor a la variable nombre en cada línea. Lo que equivale a copiar el valor de la parte derecha del operador de asignación en la variable de la parte izquierda del operador de asignación.

¡Para recordar!

Para llamar a un método de una cadena de caracteres y acceder a su funcionalidad, se debe escribir la cadena de caracteres (o el nombre de la variable que contiene la cadena) seguido de un punto ., seguido del nombre del método, seguido de un paréntesis abierto y un paréntesis cerrado y tal vez algún argumento entre los paréntesis, si es necesario.

Por ejemplo, nombre.strip() llama al método strip() sobre la variable nombre. Y nombre.capitalize() llama al método capitalize() sobre la variable nombre. En este caso, ninguno de los métodos necesita argumentos.

Finalizando con el ejemplo, el usuario ingresa su nombre en minúsculas y con espacios adicionales al principio y al final.

Terminal (Entrada/Salida)
Ingrese su nombre:           pablo      _
Hola, Pablo!

Luego de aplicar los métodos strip() y capitalize(), el nombre del usuario se ve más bonito. No importa cómo el usuario haya escrito su nombre, aunque sea un poco descuidado, ahora lo estamos arreglando por el.

.title()

¿Qué ocurriría si el usuario ingresa su nombre y apellido?

Python
nombre = input("Ingrese su nombre: ")

# Elimina los espacios en blanco al principio y al final de la cadena de caracteres
nombre = nombre.strip()

# Convierte la primera letra de la cadena en mayúscula y el resto en minúsculas
nombre = nombre.capitalize()

# Saluda al usuario con la cadena de caracteres reformateada
print(f"Hola, {nombre}!")

La salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese su nombre y apellido:           pablo roca      _
Hola, Pablo roca!

En este caso, el usuario ingresó su nombre y apellido en minúsculas y con espacios adicionales al principio y al final. ¿Cómo podemos hacer para que la primera letra de cada palabra sea mayúscula?

Python
nombre = input("Ingrese su nombre y apellido: ")

# Elimina los espacios en blanco al principio y al final de la cadena de caracteres
nombre = nombre.strip()

# Convierte la primera letra de cada palabra en mayúscula y el resto en minúsculas
nombre = nombre.title()

# Saluda al usuario con la cadena de caracteres reformateada
print(f"Hola, {nombre}!")

En este caso, la línea 7 llama al método title() sobre la variable nombre para convertir la primera letra de cada palabra en mayúscula y el resto en minúsculas.

La salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese su nombre y apellido:           pablo roca      _
Hola, Pablo Roca!

.title()

Devuelve una copia de la cadena convirtiendo la primera letra de cada palabra de la cadena a mayúsculas y el resto de las letras a minúsculas.

.lower() / .upper()

Existen otros métodos que permiten unificar el formato de una cadena de caracteres. Por ejemplo, si se desea convertir todas las letras de una cadena de caracteres a minúsculas, se puede utilizar el método lower().

Python
1
2
3
4
5
6
7
texto = "Hola, Mundo!"

# Convierte todas las letras de la cadena en minúsculas
texto = texto.lower()

# Imprime la cadena de caracteres en minúsculas
print(texto)

La salida en la Terminal será:

Terminal (Entrada/Salida)
hola, mundo!

En este caso, la línea 3 llama al método lower() sobre la variable texto para convertir todas las letras de la cadena de caracteres a minúsculas.

.lower()

Devuelve una copia de la cadena convirtiendo todas las letras de la cadena a minúsculas.

De manera similar, si se desea convertir todas las letras de una cadena de caracteres a mayúsculas, se puede utilizar el método upper().

Python
1
2
3
4
5
6
7
texto = "Hola, Mundo!"

# Convierte todas las letras de la cadena en mayúsculas
texto = texto.upper()

# Imprime la cadena de caracteres en mayúsculas
print(texto)

La salida en la Terminal será:

Terminal (Entrada/Salida)
HOLA, MUNDO!

En este caso, la línea 3 llama al método upper() sobre la variable texto para convertir todas las letras de la cadena de caracteres a mayúsculas.

.upper()

Devuelve una copia de la cadena convirtiendo todas las letras de la cadena a mayúsculas.

¡Para recordar!

Los métodos lower() y upper() permiten convertir todas las letras de una cadena de caracteres a minúsculas y mayúsculas, respectivamente.

Estos métodos son muy importantes a la hora de comparar cadenas de caracteres, ya que permiten unificar el formato de las cadenas y evitar problemas de comparación debido a diferencias en el formato de las letras.

Este tema lo veremos con mayor detalle más adelante.

.swapcase()

Otro método interesante es swapcase(), que permite intercambiar las letras mayúsculas por minúsculas y viceversa en una cadena de caracteres.

Python
1
2
3
4
5
6
7
texto = "Hola, Mundo!"

# Intercambia las letras mayúsculas por minúsculas y viceversa
texto = texto.swapcase()

# Imprime la cadena de caracteres con las letras intercambiadas
print(texto)

La salida en la Terminal será:

Terminal (Entrada/Salida)
hOLA, mUNDO!

En este caso, la línea 3 llama al método swapcase() sobre la variable texto para intercambiar las letras mayúsculas por minúsculas y viceversa en la cadena de caracteres.

.swapcase()

Devuelve una copia de la cadena intercambiando las letras mayúsculas por minúsculas y viceversa.

Consideraciones finales sobre los métodos que modifican el contenido o el formato de una cadena de caracteres

¡Para recordar!

Los métodos de cadena de caracteres en Python permiten realizar operaciones específicas sobre las cadenas de caracteres sin modificar la cadena original.

Algunos métodos comunes son strip(), lstrip(), rstrip(), capitalize(), title(), lower(), upper() y swapcase().

Estos métodos no modifican la cadena de caracteres original. En su lugar, devuelven una nueva cadena de caracteres con las modificaciones realizadas. Por lo tanto, si es necesario mantener el nuevo formato, deberá ser asignado a una variable.

Los métodos de cadena de caracteres son muy útiles para limpiar o reformatear una cadena de caracteres de manera tal que se vea como nosotros queremos o precisamos. Por ejemplo, se pueden eliminar los espacios en blanco al principio y al final de una cadena de caracteres, convertir la primera letra de la cadena en mayúscula y el resto en minúsculas, convertir la primera letra de cada palabra en mayúscula y el resto en minúsculas, convertir todas las letras de la cadena en minúsculas o mayúsculas, o intercambiar las letras mayúsculas por minúsculas y viceversa.

Invocando varios métodos juntos sobre una cadena de caracteres

¿Cuántos métodos se pueden combinar para poder ser ejecutados sobre una cadena de caracteres?

Técnicamente, tantos como se quiera, aunque en cierto punto el código comenzará a verse mal conforme la línea de código se extienda demasiado o, incluso por algún motivo, debas volver a invocar algún método reiteradas veces. En estos casos, lo mejor sería dividir la línea de código en varias líneas, utilizando alguna variable para ir almacenando los resultados previos hasta llegar al resultado final buscado, como hemos visto hasta acá en nuestros ejemplos.

Habiendo entendido lo anterior, ahora vamos a ver como, en Python, es posible invocar varios métodos de cadena de caracteres juntos. Por ejemplo, si se desea eliminar los espacios en blanco al principio y al final de la cadena de caracteres, convertir la primera letra de cada palabra en mayúsculas y el resto en minúsculas, se pueden invocar los métodos strip() y title() juntos.

Python
1
2
3
4
5
6
7
8
nombre = input("Ingrese su nombre y apellido: ")

# Elimina los espacios en blanco al principio y al final de la cadena de caracteres, 
# y convierte la primera letra de cada palabra en mayúscula y el resto en minúsculas
nombre = nombre.strip().title()

# Saluda al usuario con la cadena de caracteres reformateada
print(f"Hola, {nombre}!")

La salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese su nombre y apellido:           pablo roca      _
Hola, Pablo Roca!

En este caso, se han invocado los métodos strip() y title() juntos sobre la variable nombre para eliminar los espacios en blanco al principio y al final de la cadena de caracteres, y convertir la primera letra de cada palabra en mayúscula y el resto en minúsculas.

¡Para recordar!

En Python, es posible invocar varios métodos de cadena de caracteres juntos. Para ello, se deben escribir los métodos uno después del otro, separados por un punto .. Por ejemplo, nombre.strip().title() invoca los métodos strip() y title() sobre la variable nombre.

Optimizando aún más el código

En el código anterior, se ha utilizado la variable nombre para almacenar la cadena de caracteres reformateada. Sin embargo, es posible optimizar aún más el código y utilizar la cadena de caracteres reformateada directamente en la función input().

Python
1
2
3
4
nombre = input("Ingrese su nombre y apellido: ").strip().title()

# Saluda al usuario con la cadena de caracteres reformateada
print(f"Hola, {nombre}!")

La salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese su nombre y apellido:           pablo roca      _
Hola, Pablo Roca!

En este caso, se ha utilizado la cadena de caracteres reformateada directamente en la función input() y se han invocado los métodos strip() y title() juntos sobre la cadena de caracteres. De esta manera, se ha optimizado el código y se ha reducido la cantidad de líneas de código.

Hemos pasado de 8 líneas de código a 4. Este nuevo código es mucho más ajustado y mucho más ordenado. Y aunque es muy subjetivo, desde mi punto de vista podría asegurarte que así es mejor porque simplemente es más fácil de leer. Menos líneas de código, menos oportunidades de cometer errores, concreto y conciso.

¡Para recordar!

Es posible utilizar la cadena de caracteres reformateada directamente en una función, como en el caso de input("Ingrese su nombre y apellido: ").strip().title().

También podríamos haber optimizado el código aplicando los métodos strip() y title() directamente en la función print().

Python
1
2
3
4
nombre = input("Ingrese su nombre y apellido: ")

# Saluda al usuario con la cadena de caracteres reformateada
print(f"Hola, {nombre.strip().title()}!")

En este caso no estamos guardando la cadena de caracteres reformateada en la variable nombre, sino que la estamos utilizando directamente en la función print(). La salida en la Terminal virtual será la misma que en el caso anterior.

Y aún es posible llegar a una versión más compacta del código, eliminando la variable nombre y utilizando la cadena de caracteres reformateada directamente en la función print():

Python
# Saluda al usuario con la cadena de caracteres reformateada
print(f"Hola, {input("Ingrese su nombre y apellido: ").strip().title()}!")

La salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese su nombre y apellido:           pablo roca      _
Hola, Pablo Roca!

En este caso, se ha eliminado la variable nombre y se ha utilizado la cadena de caracteres reformateada directamente en la función print(). De esta manera, se ha optimizado aún más el código y se ha reducido la cantidad de líneas de código.

¡Para recordar!

Es posible utilizar la cadena de caracteres reformateada directamente en una función, como en el caso de
print(f"Hola, {input("Ingrese su nombre y apellido: ").strip().title()}!").

¿Es mejor escribir código más corto y compacto, o más largo y legible?

Este tema lo abordamos en la sección Programas largos o programas cortos.

Pero, en general, es mejor escribir código más corto y compacto. Este al ser interpretable de izquierda a derecha como en la lectura tradicional humana, fluye de manera muy natural.

A pesar de reunir varias tareas en una misma línea de código, en general estas no poseen grandes extensiones, encajando casi siempre en el ancho de las pantallas.

Sin embargo, al escribir código de esta manera, es importante que sea legible y fácil de entender.

En el caso de los ejemplos anteriores, se ha optimizado el código y se ha reducido la cantidad de líneas de código, pero también se ha mantenido la legibilidad del mismo.

En última instancia, la elección de escribir código más corto y compacto o más largo y legible depende de tus preferencias personales, de tus habilidades y de tus objetivos.

Métodos que dividen una cadena de caracteres

.split() / .rsplit()

Existen otros métodos de cadena de caracteres que permiten dividir una cadena en múltiples subcadenas más pequeñas.

El más utilizado es split(), que devuelve una lista de subcadenas resultantes de dividir la cadena original en función de un delimitador específico, como un espacio en blanco, una coma o cualquier otro carácter o subcadena que se especifique como separador.

Su sintaxis es:

Python
cadena.split(separador=None[, maxsplit=-1])

Donde: * cadena: Es la cadena de caracteres sobre la que se aplicará el método. * separador: Es el delimitador que se utilizará para dividir la cadena en subcadenas más pequeñas. Si no se especifica, se utilizan espacios en blanco. * maxsplit: Es un argumento opcional que indica el número máximo de divisiones que serán efectuadas. Si no se especifica, se realizan todas las divisiones posibles.

Por ejemplo, si un usuario tiene la costumbre de escribir su nombre, seguido de un espacio y luego su apellido, y se desea saludarlo solo por su nombre, se puede dividir la cadena en dos subcadenas más pequeñas.

Python
nombre = input("Ingrese su nombre y apellido: ").strip().title() # El ingreso es "pablo roca"

# Devuelve una lista con las subcadenas resultantes de dividir la cadena original en función de un espacio 
nombre_por_partes = nombre.split(" ") # Almacena ['Pablo', 'Roca'] en la lista `nombre_por_partes`

# Saluda al usuario solo por su nombre. Para ello, se utiliza la primera subcadena resultante de dividir la cadena original, que se encuentra en la posición 0 de la lista
print(f"Hola, {nombre_por_partes[0]}!")

La salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese su nombre y apellido: pablo roca
Hola, Pablo!

En este caso, se ha utilizado el método split() para dividir la cadena en dos subcadenas más pequeñas. Luego, se ha utilizado la primera subcadena para saludar al usuario solo por su nombre. Si te resulta confuso el uso de nombre_por_partes[0], no te preocupes, esta es la sintaxis que se emplea para acceder a los elementos de una lista en Python. Si tampoco conoces que es una lista, no te preocupes, lo veremos más adelante.

¡Para recordar!

El método split() permite dividir una cadena en múltiples subcadenas más pequeñas. Para ello, se debe escribir el nombre del método split(), seguido de un paréntesis abierto, el separador entre comillas y un paréntesis cerrado.

Por ejemplo, nombre.split(" ") divide la cadena nombre en subcadenas más pequeñas determinadas por los espacios encontrados en la cadena original.

En este caso, se ha dividido la cadena Pablo Roca a partir del espacio intermedio encontrado, en dos subcadenas más pequeñas, Pablo y Roca. Luego, se ha utilizado la primera subcadena Pablo para saludar al usuario solo por su nombre.

Supongamos ahora que el usuario ingresa su nombre y apellido, pero el apellido puede ser compuesto, es decir, puede tener más de una palabra. En este caso, se puede dividir la cadena en dos subcadenas más pequeñas, pero solo realizar una división.

Python
nombre = input("Ingrese su nombre y apellido: ").strip().title() # El ingreso es "pablo martínez roca"

# Devuelve una lista con las subcadenas resultantes de dividir la cadena original en función de un espacio, pero solo realiza una división
nombre_por_partes = nombre.split(" ", maxsplit=1) # Almacena ['Pablo', 'Martínez Roca'] en la lista `nombre_por_partes`

# Saluda al usuario solo por su nombre. Para ello, se utiliza la primera subcadena resultante de dividir la cadena original, que se encuentra en la posición 0 de la lista
print(f"Hola, {nombre_por_partes[0]}!")

La salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese su nombre y apellido: pablo martínez roca
Hola, Pablo!

En este caso, se ha utilizado el método split(" ", maxsplit=1) para dividir la cadena en dos subcadenas más pequeñas, pero solo realizar una división. Luego, se ha utilizado la primera subcadena Pablo para saludar al usuario solo por su nombre.

Veamos un tercer ejemplo. Supongamos que se tiene una cadena de caracteres con varias frutas separadas por comas, y se desea dividir la cadena en subcadenas más pequeñas, utilizando la coma como delimitador.

Python
cadena = "manzana,banana,fruta"

# Devuelve una lista con las subcadenas resultantes de dividir la cadena original en función de una coma
lista_frutas = cadena.split(",") # Almacena ['manzana', 'banana', 'fruta'] en la lista `lista_frutas`

# Imprime la lista de frutas
print(lista_frutas)

La salida en la Terminal será:

Terminal (Entrada/Salida)
['manzana', 'banana', 'fruta']

En este caso, se ha utilizado el método split(",") para dividir la cadena en subcadenas más pequeñas, utilizando la coma como delimitador. Luego, se ha almacenado la lista de frutas resultante en la variable lista_frutas y se ha impreso en la Terminal.

Cuando estudiemos listas, veremos que es posible acceder a los elementos de una lista utilizando índices, como en el caso de nombre_por_partes[0] y lista_frutas[0]. Por ahora, solo debes recordar que los métodos split() y rsplit() permiten dividir una cadena en múltiples subcadenas más pequeñas.

.split(separador=None[, maxsplit=-1])

Divide una cadena en subcadenas a partir del separador especificado y las devuelve como una lista de elementos.

Si no se especifica un separador, se utilizan espacios en blanco.

Si maxsplit no se especifica, se realizan todas las divisiones posibles.

Si se especifica maxsplit, su valor representa el número (máximo) de divisiones que serán efectuadas.

Supongamos ahora que en lugar de 2 apellidos el usuario tiene 2 nombres. En este caso, se puede utilizar el método rsplit() para dividir la cadena en subcadenas más pequeñas a partir del final. rsplit() es similar a split(), pero divide la cadena empezando desde el final hacia el principio.

Python
nombre = input("Ingrese su nombre y apellido: ").strip().title() # El ingreso es "pablo andrés roca"

# Devuelve una lista con las subcadenas resultantes de dividir la cadena original en función de un espacio, pero solo realiza una división desde el final
nombre_por_partes = nombre.rsplit(" ", maxsplit=1) # Almacena ['Pablo Andrés', 'Roca'] en la lista `nombre_por_partes`

# Saluda al usuario solo por su doble nombre. Para ello, se utiliza la primera subcadena resultante de dividir la cadena original, que se encuentra en la posición 0 de la lista
print(f"Hola, {nombre_por_partes[0]}!")

La salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese su nombre y apellido: pablo andrés roca
Hola, Pablo Andrés!

En este caso, se ha utilizado el método rsplit(" ", maxsplit=1) para dividir la cadena en dos subcadenas más pequeñas, pero solo realizar una división desde el final. Luego, se ha utilizado la primera subcadena Pablo Andrés para saludar al usuario solo por su doble nombre.

.rsplit(separador=None[, maxsplit=-1])

Divide una cadena en subcadenas a partir del final, usando el separador especificado como la cadena delimitadora, y las devuelve como una lista de elementos.

Si no se especifica un separador, se utilizan espacios en blanco.

Si maxsplit no se especifica, se realizan todas las divisiones posibles.

Si se especifica maxsplit, su valor representa el número (máximo) de divisiones que serán efectuadas.

.splitlines()

Otro método interesante es splitlines(), que permite dividir una cadena en subcadenas más pequeñas a partir de los saltos de línea.

Python
texto = "Primera línea\nSegunda línea\nTercera línea"

# Devuelve una lista con las subcadenas resultantes de dividir la cadena original en función de los saltos de línea
lineas = texto.splitlines() # Almacena ['Primera línea', 'Segunda línea', 'Tercera línea'] en la lista `lineas`

# Imprime la lista de líneas
print(lineas)

La salida en la Terminal será:

Terminal (Entrada/Salida)
['Primera línea', 'Segunda línea', 'Tercera línea']

En este caso, se ha utilizado el método splitlines() para dividir la cadena en subcadenas más pequeñas a partir de los saltos de línea. Luego, se ha almacenado la lista de líneas resultante en la variable lineas y se ha impreso en la Terminal.

.splitlines()

Divide una cadena en subcadenas a partir de los saltos de línea y las devuelve como una lista de elementos.

Desempaquetado de secuencias

Como resultado de la división de una cadena de caracteres, se obtiene una lista de subcadenas más pequeñas. En Python, es posible asignar múltiples valores a múltiples variables en una sola línea de código.

Por ejemplo, si se desea dividir la cadena en dos subcadenas más pequeñas y asignar cada subcadena a una variable diferente, se puede utilizar el desempaquetado de secuencias.

Python
nombre = input("Ingrese su nombre y apellido: ").strip().title()

# Divide la cadena en dos subcadenas más pequeñas y asigna cada subcadena a una variable diferente
nombre, apellido = nombre.split(" ")

# Saluda al usuario solo por su nombre y apellido
print(f"Hola, {nombre} {apellido}!")

La salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese su nombre y apellido: pablo roca
Hola, Pablo Roca!

Dado que nombre = "Pablo Roca", la línea nombre, apellido = nombre.split(" ") asigna cada subcadena resultante de nombre al partirla por cada espacio " " encontrado a una variable diferente. En este caso, la primera subcadena Pablo se asigna a la variable nombre y la segunda subcadena Roca se asigna a la variable apellido.

Esto se llama, apropiadamente, desempaquetado de secuencias, y funciona para cualquier secuencia en el lado derecho del operador de asignación =.

El desempaquetado de secuencias requiere que la cantidad de variables a la izquierda del operador de asignación = sea la misma que la cantidad de elementos de la secuencia.

En nuestro ejemplo anterior, se ha utilizado el desempaquetado de secuencias para asignar cada subcadena a una variable diferente. Luego, se ha utilizado las variables nombre y apellido para saludar al usuario por su nombre y apellido.

sin embargo, si el usuario ingresa solo su nombre o si posee más de un nombre o un apellido, el código fallará:

Python
1
2
3
4
5
6
7
nombre = input("Ingrese su nombre y apellido: ").strip().title()

# Divide la cadena en dos subcadenas más pequeñas y asigna cada subcadena a una variable diferente
nombre, apellido = nombre.split(" ")

# Saluda al usuario solo por su nombre y apellido
print(f"Hola, {nombre} {apellido}!")

La salida en la Terminal será:

Terminal (Entrada/Salida)
Ingrese su nombre y apellido: pablo

Traceback (most recent call last):
  File "Hello.py", line 4, in <module>
    nombre, apellido = nombre.split(" ")
    ValueError: not enough values to unpack (expected 2, got 1)

El error indica que no hay suficientes valores para desempaquetar. En este caso, se esperaban dos valores, pero solo se obtuvo uno.

Conclusión

En esta sección, hemos aprendido sobre cadenas de caracteres en Python. Hemos visto cómo se pueden utilizar sus métodos para realizar operaciones específicas sobre las cadenas de caracteres sin modificar la cadena original.

Pero los programas y lenguajes de programación también pueden manipular otros tipos de datos. En la próxima Unidad, aprenderemos sobre los números y cómo se pueden utilizar en Python.