Cadenas + procesamiento de texto
Inmutabilidad, rebanado, formato y métodos
Por qué importa
La mayoría de los problemas de entrevista involucran texto. Dominar las cadenas ahorra tiempo.
La idea
Las cadenas son secuencias inmutables. El rebanado (slicing) produce cadenas NUEVAS; nunca modificas en el sitio. Las cadenas f"" son la forma moderna de dar formato.
Pruébalo
Rebanado: s[start:stop:step]:
s = "abcdefghij"
print(s[2:5]) # 'cde'
print(s[:4]) # 'abcd'
print(s[-3:]) # 'hij'
print(s[::2]) # 'acegi'
print(s[::-1]) # 'jihgfedcba' (reverse)
Métodos comunes: split, strip, join, replace, find:
raw = " Hello, World, Python "
parts = [p.strip() for p in raw.split(",")]
print(parts)
print(",".join(parts))
print("python" in raw.lower())
Formato: las f-strings le ganan a .format() y a % siempre:
name, score = "Ada", 0.875
print(f"{name:>10} | {score:6.1%}")
print(f"{name!r:<10} | binary: {42:08b}")
# Multi-line + expressions
print(f"""
sum: {2 + 3}
list: {[i*i for i in range(5)]}
""")
Métodos de cadena que debes conocer
| Categoría | Métodos | Qué hacen |
| --- | --- | --- |
| Limpiar | strip, lstrip, rstrip | eliminar espacios en blanco |
| Mayúsculas/minúsculas | lower, upper, title, capitalize | cambiar el caso |
| Buscar | find, index, count | localizar y contar |
| Coincidir | startswith, endswith | comprobar prefijo/sufijo |
| Dividir/Unir | split, rsplit, splitlines, 'sep'.join(...) | tokenizar y unir |
| Reemplazar | replace | sustitución |
| Verificar | isalnum, isalpha, isdigit, isnumeric, isspace | validación |
name = " Ada Lovelace "
print(name.strip().lower())
"data-science".split("-")
"-".join(["a", "b"])
Patrón de normalización de palíndromos
Una receta reutilizable: conserva solo los caracteres alfanuméricos y pásalos a minúsculas, luego compáralos con su reverso.
def normalize(s: str) -> str:
return "".join(ch.lower() for ch in s if ch.isalnum())
Verificación rápida
- P: ¿Las cadenas son mutables? R: No.
Mini ejercicios
- Invierte una cadena de dos formas.
- Cuenta las vocales en una oración.
- Quita la puntuación y pasa a minúsculas.
Buenas y malas prácticas
- Usa
s.strip()antes de las comparaciones. - No construyas cadenas con
+dentro de bucles.
Profundizando — bytes frente a str
En Python 3, el texto y lo binario son tipos diferentes:
str= texto (Unicode)bytes= binario crudo
Codifica (encode) para pasar de texto a bytes, decodifica (decode) para volver:
b = "hello".encode("utf-8")
text = b.decode("utf-8")Errores comunes
- Error: Intentar modificar
s[0]. Solución: Construye una cadena nueva. - Error: Usar
+dentro de un bucle. Solución: Usa"".join(...). - Error: Usar
findy luego no comprobar-1. Solución: Verifica el resultado.
Conclusiones clave
- Las cadenas son inmutables:
s.upper()devuelve una cadena nueva, no mutas. - El rebanado crea una cadena nueva;
[::-1]la invierte,[::2]toma uno de cada dos. - Las f-strings pueden incrustar expresiones y especificaciones de formato (
{x:>10.2f},{x!r},{x:08b}). str.split()/"sep".join(iterable)es el modismo para unir/dividir.- Usa
.joinpor rendimiento; normaliza el texto antes de las comparaciones.