La naturaleza de las cadenas en Python
En este artículo se explora la naturaleza de las cadenas en Python, un tipo de dato fundamental en este lenguaje de programación. Las cadenas son secuencias de caracteres que permiten almacenar y manipular texto de manera eficiente. A lo largo de este documento, se abordarán las características, métodos y usos de las cadenas, así como su importancia en el desarrollo de aplicaciones.

Características de las Cadenas
Inmutabilidad
Una vez creada, una cadena no puede ser modificada. Cualquier operación que parezca cambiar una cadena en realidad crea una nueva. Si se intenta cambiar un carácter de una cadena, se generará un error. Sin embargo, se puede crear una nueva cadena a partir de las operaciones realizadas sobre la original.
cadena = "Hola"
cadena[0] = "h" # Error: las cadenas son inmutables
Para "modificar" una cadena, se debe crear una nueva.
texto = "Hola"
nuevo_texto = "h" + texto[1:]
print(nuevo_texto) # "hola"
Índices y Rebanado
Las cadenas (strings) son secuencias de caracteres que mantienen un orden específico, lo que permite acceder a elementos individuales mediante indexación. Cada carácter tiene una posición numerada comenzando desde 0, lo que facilita la manipulación de subcadenas a través de técnicas como slicing.
texto = "Python"
print(texto[0]) # P
print(texto[-1]) # n
print(texto[1:4]) # yth
En Python, cuando se utiliza un índice negativo, la indexación se realiza desde el último carácter hacia el primero, comenzando por -1.
El rebanado (o slicing) de cadenas en Python es una técnica que permite extraer partes específicas de una cadena de texto. Este método utiliza índices para determinar qué caracteres incluir en el resultado.
Parámetros del Rebanado
La sintaxis general es.
cadena[inicio:fin:paso]
-
inicio
: Es el índice donde comienza el rebanado (inclusivo). Si no se especifica, se asume 0. -
fin
: Es el índice donde termina el rebanado (exclusivo). Si no se especifica, se asume el final de la cadena. -
paso
: Es el número de pasos a saltar entre caracteres. Si no se especifica, se asume 1.
Ejemplos de Rebanado
- Rebanado Básico:
cadena = "Python" # Extraer los primeros 3 caracteres print(cadena[0:3]) # Salida: "Pyt" # Extraer desde el índice 2 hasta el final print(cadena[2:]) # Salida: "thon" # Extraer desde el inicio hasta el índice 4 (sin incluirlo) print(cadena[:4]) # Salida: "Pyth"
- Uso de Índices Negativos:
# Últimos 2 caracteres print(cadena[-2:]) # Salida: "on" # Toda la cadena excepto los últimos 2 caracteres print(cadena[:-2]) # Salida: "Pyth"
- Especificar un paso: El paso indica cuántos caracteres omitir:
# Caracteres en posiciones pares print(cadena[::2]) # Salida: "Pto" # Caracteres en posiciones impares print(cadena[1::2]) # Salida: "yhn" # Cadena invertida print(cadena[::-1]) # Salida: "nohtyP"
Consideraciones en el Rebanado
- Si los índices especificados están fuera del rango de la cadena, Python no genera errores, simplemente devuelve la parte válida de la cadena.
- Si el paso es 0, se produce un error, ya que no es válido dividir por cero.
Creación de Cadenas
La creación de cadenas en Python es uno de los aspectos más básicos pero esenciales del lenguaje. Una cadena (o string) es una secuencia de caracteres que se puede definir y manipular fácilmente. A continuación, se explican las principales formas de crear y trabajar con cadenas:
- Con comillas simples:
cadena1 = 'Hola, mundo'
- Con comillas dobles:
cadena2 = "Hola, mundo"
- Con comillas triples: Útil para cadenas multilínea
cadena3 = '''Esta es una cadena que abarca varias líneas'''
o
cadena4 = """Otra forma de hacer cadenas multilínea"""
Operaciones con Cadenas
- Concatenación: Unir cadenas usando el operador
+
ojoin()
.cadena1 = "Hola" cadena2 = "Mundo" resultado = cadena1 + " " + cadena2 # "Hola Mundo" resultado_join = " ".join([cadena1, cadena2]) # "Hola Mundo"
- Repetición: Repetir una cadena usando el operador
*
.cadena = "Python" resultado = cadena * 3 # "PythonPythonPython"
- Subcadenas: Extraer partes de una cadena.
cadena = "Python es divertido" subcadena = cadena[0:6] # "Python" subcadena_final = cadena[-9:] # "divertido"
- Longitud: Obtener la cantidad de caracteres con
len()
.cadena = "Python" longitud = len(cadena) # 6
- Métodos para búsqueda e información:
-
find(sub[, start[, end]])
: Devuelve el índice de la primera aparición desub
. Si no lo encuentra, devuelve-1
. -
index(sub[, start[, end]])
: Similar afind()
, pero genera una excepciónValueError
si no encuentra la subcadena. -
count(sub[, start[, end]])
: Devuelve el número de veces quesub
aparece en la cadena. -
startswith(prefix[, start[, end]])
: Verifica si la cadena comienza conprefix
. -
endswith(suffix[, start[, end]])
: Verifica si la cadena termina consuffix
. -
sub in cadena
: Verifica si sub esta en cadena. -
min(sub,[key=len])
: Retorna el carácter "menor" (según el valor ASCII) o la cadena "menor" según el orden lexicográfico (orden alfabético), opcionalmente permite definir un criterio de comparación, p. e. la longitud del texto, Si se aplica a una cadena vacía o una colección vacía, se generará un error (ValueError
). -
sub in cadena
: Verifica si sub esta en cadena.
cadena = "aprende Python con Python" palabras = ["manzana", "banana", "cereza"] print(cadena.find("Python")) # 8 print(cadena.index("Python")) # 8 print(cadena.count("Python")) # 2 print(cadena.startswith("aprende")) # True print(cadena.endswith("Python")) # True print("Python" in cadena) # True print(min(cadena)) # ' ' print(min(palabras)) # 'banana' print(min(palabras, key=len)) # 'banana' print(max(cadena)) # 'y' print(max(palabras)) # 'manzana' print(max(palabras, key=len)) # 'manzana'
-
- Métodos de modificación de cadenas:
-
capitalize()
: Convierte el primer carácter de la cadena a mayúscula. -
lower()
: Convierte todos los caracteres de la cadena a minúscula. -
upper()
: Convierte todos los caracteres de la cadena a mayúscula. -
title()
: Convierte el primer carácter de cada palabra a mayúscula. -
swapcase()
: Invierte las mayúsculas y minúsculas de todos los caracteres.
cadena = "hola MUNDO" print(cadena.capitalize()) # Hola mundo print(cadena.lower()) # hola mundo print(cadena.upper()) # HOLA MUNDO print(cadena.title()) # Hola Mundo print(cadena.swapcase()) # HOLA mundo
-
- Métodos de transformación:
-
replace(old, new[, count])
: Reemplaza todas las apariciones deold
pornew
. Opcionalmente, se puede limitar el número de reemplazos concount
. -
strip([chars])
: Elimina caracteres de espacio en blanco al principio y al final de la cadena (o los caracteres especificados enchars
). -
lstrip([chars])
: Elimina los caracteres al inicio de la cadena. -
rstrip([chars])
: Elimina los caracteres al final de la cadena. -
zfill(width)
: Rellena la cadena con ceros a la izquierda hasta alcanzar el ancho especificado.
cadena = " Python " print(cadena.replace("Python", "Java")) # "Java" print(cadena.strip()) # "Python" print(cadena.lstrip()) # "Python " print(cadena.rstrip()) # " Python" print("42".zfill(5)) # 00042
-
- Métodos para dividir y unir cadenas:
-
split(sep=None, maxsplit=-1)
: Divide la cadena en una lista según un separador. -
rsplit(sep=None, maxsplit=-1)
: Similar asplit()
, pero divide desde el final. -
splitlines([keepends])
: Divide la cadena en líneas. -
join(iterable)
: Une una lista de cadenas usando el carácter de la cadena original como separador. -
partition(sep)
: Divide la cadena en tres partes: antes, el separador, y después. -
rpartition(sep)
: Similar apartition()
, pero busca desde el final.
cadena = "uno,dos,tres" print(cadena.split(",")) # ['uno', 'dos', 'tres'] print(cadena.rsplit(",", 1)) # ['uno,dos', 'tres'] print("Hola\nMundo".splitlines()) # ['Hola', 'Mundo'] print("-".join(["uno", "dos"])) # uno-dos print(cadena.partition(",")) # ('uno', ',', 'dos,tres')
-
- Unir listas en una cadena: Combinar elementos de una lista en una sola cadena con
join()
.palabras = ["Python", "es", "genial"] cadena = " ".join(palabras) # "Python es genial" cadena = "-".join(palabras) # "Python-es-genial"
- Métodos de verificación: Devuelven
True
oFalse
según la naturaleza de la cadena:-
isalpha()
: Verifica si todos los caracteres son alfabéticos. -
isdigit()
: Verifica si todos los caracteres son dígitos. -
isalnum()
: Verifica si todos los caracteres son alfanuméricos. -
isspace()
: Verifica si la cadena contiene solo espacios. -
islower()
: Verifica si todos los caracteres están en minúscula. -
isupper()
: Verifica si todos los caracteres están en mayúscula. -
istitle()
: Verifica si la cadena tiene formato de título.
cadena = "Python3" print(cadena.isalpha()) # False print("123".isdigit()) # True print("Hola123".isalnum()) # True print(" ".isspace()) # True
Métodos de alineación -
-
center(width[, fillchar])
: Centra la cadena en un espacio de width. -
ljust(width[, fillchar])
: Alinea la cadena a la izquierda. -
rjust(width[, fillchar])
: Alinea la cadena a la derecha.
cadena = "Python"
print(cadena.center(10, "-")) # --Python--
print(cadena.ljust(10, "-")) # Python----
print(cadena.rjust(10, "-")) # ----Python
Uso de Caracteres Especiales
Cuando se necesitan incluir caracteres como comillas o saltos de línea, se usa la barra invertida (\
):
cadena = "Esto es un \"ejemplo\" de cadena."
print(cadena) # Resultado: Esto es un "ejemplo" de cadena.
multilínea = "Línea 1\nLínea 2\nLínea 3"
print(multilínea)
# Resultado:
# Línea 1
# Línea 2
# Línea 3
Representación de Cadenas Crudas
Para evitar que los caracteres de escape sean interpretados, se usa el prefijo r
:
ruta = r"C:\nueva\carpeta"
print(ruta) # Resultado: C:\nueva\carpeta
Soporte para Iteración
En Python, se puede iterar sobre strings de diversas maneras. Dado que un string en Python es una secuencia de caracteres, se pueden utilizar las estructuras de control de flujo comunes como for para iterar sobre cada carácter.
Iterar sobre los Caracteres de un String con un Bucle for
mi_string = "Hola Mundo"
for caracter in mi_string:
print(caracter)
Usar enumerate() para Obtener el Índice y el Valor del Carácter
mi_string = "Hola Mundo"
for indice, caracter in enumerate(mi_string):
print(f"Índice {indice}: {caracter}")
Iterar sobre un Rango de Índices para Acceder a los Caracteres Usando un Bucle for
mi_string = "Hola Mundo"
for i in range(len(mi_string)):
print(f"Carácter en índice {i}: {mi_string[i]}")
Usar Comprensión de Listas para Crear una Lista con los Caracteres
mi_string = "Hola Mundo"
caracteres = [caracter for caracter in mi_string]
print(caracteres)
Iterar Usando while
mi_string = "Hola Mundo"
i = 0
while i < len(mi_string):
print(mi_string[i])
i += 1
Dar Formato a las Cadenas
Interpolación con el Operador %
Permite insertar valores en una cadena utilizando marcadores de posición.
nombre = "Juan"
edad = 25
print("Hola, %s. Tienes %d años." % (nombre, edad))
%s
para cadenas%d
para enteros-
%f
para números de punto flotante (se puede especificar la precisión, por ejemplo,%.2f
).
Método str.format
Una alternativa más flexible que el operador %. Utiliza llaves {}
como marcadores de posición.
nombre = "Juan"
edad = 25
print("Hola, {}. Tienes {} años.".format(nombre, edad))
También permite nombrar variables dentro de las llaves:
print("Hola, {nombre}. Tienes {edad} años.".format(nombre="Juan", edad=25))
F-strings (Format Strings)
Introducido en Python 3.6, es el método más moderno y eficiente. Utiliza una f antes de la cadena e incrusta expresiones dentro de las llaves {}
.
nombre = "Juan"
edad = 25
print(f"Hola, {nombre}. Tienes {edad} años.")
Incluso permite incluir operaciones dentro de las llaves:
print(f"El año que viene tendrás {edad + 1} años.")
Método Template de la Librería string
Es útil cuando se requiere personalizar los marcadores, especialmente en entornos donde se manejan plantillas de texto.
from string import Template
template = Template("Hola, $nombre. Tienes $edad años.")
mensaje = template.substitute(nombre="Juan", edad=25)
print(mensaje)
Ventaja: Facilita separar datos y plantillas de texto.
Controlar la Precisión en Números
Con los métodos str.format
o f-strings
, se puede especificar el formato de los números.
pi = 3.14159
print("El valor de pi es {:.2f}".format(pi)) # Con 2 decimales
print(f"El valor de pi es {pi:.2f}") # Usando f-strings