En el tutorial sobre tipos de datos básicos ya indiqué que el tipo str en Python se utilizaba para representar cadenas de caracteres.
En este tutorial describiré en detalle la clase str y descubrirás las principales operaciones que se pueden realizar sobre un string en Python.
Índice
- Qué es el tipo str en Python
- Cómo crear una cadena en Python
- Cómo acceder a los caracteres de una cadena en Python
- for str Python – Recorrer los caracteres de una cadena
- Comprobar si un carácter está en una cadena en Python
- Comprobar si dos strings son iguales en Python
- Longitud (len) de una cadena en Python
- Escapar caracteres de una cadena en Python
- Raw strings
- Representación de un objeto como cadena
- Otras operaciones sobre cadenas en Python
Qué es el tipo str en Python
La clase str en Python se utiliza para representar texto, más conocido en el mundo de la programación como string o cadena de caracteres.
Poniéndome un poco más técnico, el tipo str es una secuencia inmutable de caracteres Unicode. Por tanto, al igual que list, tuple o range, es un tipo secuencial y como es inmutable, un objeto de este tipo no se puede modificar después de haber sido creado.
❗️ IMPORTANTE: Cuidado cuando trabajes con texto procedente de ficheros u otras fuentes de datos. Fíjate en qué codificación está y haz las transformaciones necesarias si no quieres tener problemas. Por defecto, la codificación de un string en Python es Unicode, concretamente UTF-8.
Cómo crear una cadena en Python
Crear una cadena de texto en Python es muy sencillo. Simplemente encierra una secuencia de caracteres entre comillas simples ''
o dobles ""
.
>>> s = 'Hola Pythonista' >>> s 'Hola Pythonista' >>> type(s) <class 'str'> >>> s2 = "Me gusta Python" >>> s2 'Me gusta Python' >>> type(s2) <class 'str'>
Si quieres o necesitas que un string ocupe más de una línea, entonces debes encerrar el texto entre tres comillas simples '''...'''
o dobles """..."""
.
>>> s = ''' ... Este string ... ocupa más ... de ... una línea''' >>> s '\nEste string\n ocupa más\n de\n una línea' >>> print(s) Este string ocupa más de una línea
Como puedes observar, el uso de las tres comillas (simples o dobles) guarda el carácter de fin de línea. Esto se puede evitar añadiendo el carácter \
al final de cada línea.
>>> s = '''Este string \ ... ocupa más \ ... de \ ... una línea''' >>> s 'Este string ocupa más de una línea' >>> print(s) Este string ocupa más de una línea
❗️ OJO: No confundas un string multilínea con un docstring. Un docstring es un string multilínea que se utiliza para documentar un módulo, función, clase o método, entre otros.
Además, dos cadenas se pueden concatenar con el operador +
, o incluso repetir, usando el operador *
. El resultado en ambos casos es un nuevo string.
>>> hola = 'hola' >>> s = hola + ' Pythonista' >>> s 'hola Pythonista' >>> s2 = hola * 3 + ' Pythonista' >>> s2 'holaholahola Pythonista'
Y para terminar esta sección, simplemente resaltar que dos strings literales se pueden concatenar si aparecen juntos uno tras otro.
>>> s = 'Hola' ' Pythonista' >>> s 'Hola Pythonista' >>> s = ('Hola' ... ' Pythonista' ... ' ¿Te gusta Python?') >>> s 'Hola Pythonista ¿Te gusta Python?'
Cómo acceder a los caracteres de una cadena en Python
Como el resto de tipos secuencia, podemos acceder a los caracteres de una cadena a través de un índice numérico. Un índice es un número entero que indica la posición de un carácter en la cadena. Siempre el primer carácter de la secuencia tiene como índice 0.
>>> s = 'Hola Pythonista' # Primer carácter de la cadena >>> s[0] 'H' # Sexto carácter de la cadena >>> s[5] 'P' # Tercer carácter de la cadena >>> s[2] 'l'
Si se intenta acceder a un índice que está fuera del rango del string, el intérprete lanzará la excepción IndexError
. De igual modo, si se utiliza un índice que no es un número entero, se lanzará la excepción TypeError
>>> s = 'Hola Pythonista' >>> s[30] Traceback (most recent call last): File "<input>", line 1, in <module> IndexError: string index out of range >>> s[1.0] Traceback (most recent call last): File "<input>", line 1, in <module> TypeError: string indices must be integers
Los índices también puede ser negativos. En este caso, el índice -1
hace referencia al último carácter, -2
al penúltimo, y así, sucesivamente.
>>> s = 'Hola Pythonista' >>> s[-1] 'a' >>> s[-2] 't'
for str Python – Recorrer los caracteres de una cadena
En Python es posible recorrer todos los caracteres de una cadena usando la sentencia for. Para ello, lo más fácil es seguir la siguiente plantilla:
>>> saludo = 'Hola' >>> for c in saludo: ... print(c) ... H o l a
Comprobar si un carácter está en una cadena en Python
Para comprobar si un carácter está contenido en una cadena, utiliza el operador de pertenencia in
. Esto nos devolverá True
si al menos hay una ocurrencia del carácter en el string o False
en caso contrario.
>>> saludo = 'Hola' >>> print('o' in saludo) True >>> print('p' in saludo) False >>> print('p' not in saludo) True
Comprobar si dos strings son iguales en Python
En Python, para comparar si dos cadenas de caracteres son iguales, se utiliza el operador de igualdad ==
. Dos strings son iguales si y solo si ambas cadenas contienen la misma secuencia de caracteres (se distingue entre mayúsculas y minúsculas).
>>> s1 = 'hola' >>> s2 = 'hola' >>> print(s1 == s2) True >>> s3 = 'Hola' >>> print(s1 == s3) False
Longitud (len) de una cadena en Python
Como con cualquier otro tipo contenedor o secuencia, para obtener la longitud de una cadena se debe utilizar la función de Python len()
. A esta función se le pasa como argumento la cadena en cuestión y nos devolverá el número de caracteres que tiene.
>>> saludo = 'Hola' >>> len(saludo) 4
Escapar caracteres de una cadena en Python
Como un string está limitado por los caracteres ''
o ""
, ¿qué ocurre si necesito usar el carácter '
o "
dentro de una cadena?
Lo más fácil si tienes que usar el carácter '
en tu cadena, es encerarla entre comillas dobles. Por el contrario, si necesitas usar "
dentro del string, enciérralo entre comillas simples.
>>> s = 'Dijo: "Hola Pythonista"' >>> print(s) Dijo: "Hola Pythonista" >>> s = "Dijo: 'Hola Pythonista'" >>> print(s) Dijo: 'Hola Pythonista'
También puedes usar la combinación \'
para mostrar una comilla simple o \"
para mostrar una comilla doble, independientemente de si la cadena está encerrada entre comillas simples o dobles.
>>> s = 'Dijo: \'Hola Pythonista\'' >>> print(s) Dijo: 'Hola Pythonista' >>> s = "Dijo: \"Hola Pythonista\"" >>> print(s) Dijo: "Hola Pythonista"
Además del carácter '
y "
, hay otros caracteres especiales que para ser usados dentro de una cadena necesitan ser «escapados» con el carácter \
. Son, entre otros, los siguientes: tabulador (\t
), barra invertida (\\
), retroceso (\b
), nueva línea (\n
) o retorno de carro (\r
).
# Ejemplo para declarar una ruta en Windows >>> s = 'C:\\Users\\Documents\\' >>> print(s) C:\Users\Documents\ # Nueva línea más tabulador >>> s = 'Hola\n\tPythonista' >>> print(s) Hola Pythonista
Raw strings
En relación con la sección anterior, puede haber ocasiones en que se quiera usar el carácter \
pero sin ser utilizado como carácter de escape. Para ello, se puede hacer uso de las raw strings. Una cadena de este tipo comienza anteponiendo el carácter r
a las comillas (simples o dobles).
# Aquí, \n es interpretado como nueva línea >>> s = 'C:\python\noticias' >>> print(s) C:\python oticias # En una raw string no se interpreta el carácter \ >>> s = r'C:\python\noticias' >>> print(s) C:\python\noticias
Representación de un objeto como cadena
Una singularidad de la clase str es que a su constructor se le puede pasar cualquier objeto. Al hacer esto, la función str()
devuelve la representación en forma de cadena de caracteres del propio objeto (si se pasa un string devuelve el string en sí).
Normalmente, al llamar a la función str(objeto)
lo que se hace internamente es llamar al método __str__()
del objeto
. Si este método no existe, entonces devuelve el resultado de invocar a repr(objeto)
.
Otras operaciones sobre cadenas en Python
Para finalizar este tutorial, te dejo en esta sección una recopilación de otras entradas del blog en las que se muestran más operaciones y utilidades con cadenas de caracteres: