Estructuras de datos · #5 de 11

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)
not loaded

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())
not loaded

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)]}
""")
not loaded

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

Mini ejercicios

Buenas y malas prácticas

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

Conclusiones clave