Python Strings: Guía Completa
Aprende Python strings desde cero: creación, indexación, slicing, f-strings, métodos integrados y errores comunes con ejemplos ejecutables.
Los strings son uno de los tipos de datos más utilizados en Python. Cada vez que tu programa lee un archivo, muestra un mensaje o analiza una entrada, trabaja con strings. Este capítulo explica cómo crear strings, indexarlos y hacer slicing, usar métodos integrados y evitar errores comunes.
¿Qué es un string en Python?
Un string es una secuencia ordenada e inmutable de caracteres Unicode. "Inmutable" significa que nunca puedes cambiar un carácter en su lugar — toda operación que parezca modificar un string en realidad crea uno nuevo. Los strings pueden contener letras, dígitos, puntuación, espacios en blanco o cualquier carácter Unicode (incluyendo emojis).
greeting = "Hello, world!"
print(type(greeting)) # <class 'str'>
print(len(greeting)) # 13Creación de strings
Python acepta tres estilos de comillas, que son todos equivalentes:
single = 'Python'
double = "Python"
triple = """Python""" # triple-double also works as '''Python'''Comillas simples y dobles
Usa el estilo que evite escapar el carácter de comilla dentro del string:
message1 = "It's a great day" # apostrophe is fine inside double quotes
message2 = 'She said "hello"' # double quote is fine inside single quotesStrings con comillas triples (multilínea)
Las comillas triples permiten que un string abarque varias líneas sin necesidad de secuencias de escape:
poem = """Roses are red,
Violets are blue,
Python is awesome,
And so are you."""
print(poem)Salida:
Roses are red,
Violets are blue,
Python is awesome,
And so are you.Los strings con comillas triples son también la forma convencional de escribir docstrings — los bloques de documentación que aparecen al inicio de funciones, clases y módulos.
Convertir otros tipos a strings
Usa la función integrada str() para convertir cualquier objeto a su representación en string:
num = 42
pi = 3.14
flag = True
print(str(num)) # '42'
print(str(pi)) # '3.14'
print(str(flag)) # 'True'Indexación de caracteres
Python usa indexación basada en cero: el primer carácter está en el índice 0. También puedes usar índices negativos — -1 hace referencia al último carácter, -2 al penúltimo, y así sucesivamente.
Acceder a un índice fuera del rango válido genera un IndexError.
Slicing de strings
Un slice extrae una porción de un string usando la sintaxis s[start:stop:step].
| Parte | Significado | Valor por defecto |
|---|---|---|
start | Índice del primer carácter a incluir | 0 |
stop | Índice del primer carácter a excluir | len(s) |
step | Cuántos caracteres avanzar cada vez | 1 |
s = "Hello, World!"
print(s[0:5]) # Hello — characters at indexes 0–4
print(s[7:]) # World! — from index 7 to the end
print(s[:5]) # Hello — from the start to index 4
print(s[-6:]) # World! — last 6 characters
print(s[::2]) # Hlo ol! — every other character
print(s[::-1]) # !dlroW ,olleH — reversed stringPara un análisis más detallado de la sintaxis de slicing, consulta el capítulo Slicing Strings.
Concatenación y repetición de strings
El operador + une dos strings; el operador * repite un string un número determinado de veces.
Para concatenaciones a gran escala dentro de un bucle, usa str.join() en lugar de + — es significativamente más rápido porque evita crear objetos string intermedios:
words = ["one", "two", "three"]
result = ", ".join(words)
print(result) # one, two, threeRepetición de strings
Los operadores in y not in
Comprueba si una subcadena existe dentro de un string con in o not in:
text = "The quick brown fox"
print("quick" in text) # True
print("slow" in text) # False
print("slow" not in text) # TrueLongitud de un string
len() devuelve el número de caracteres en un string:
s = "Python"
print(len(s)) # 6
empty = ""
print(len(empty)) # 0Caracteres de escape
Algunos caracteres no se pueden escribir literalmente dentro de un string. Python usa una barra invertida \ para introducir secuencias de escape:
| Secuencia | Carácter |
|---|---|
\n | Nueva línea |
\t | Tabulación |
\\ | Barra invertida literal |
\' | Comilla simple |
\" | Comilla doble |
\r | Retorno de carro |
print("Line one\nLine two")
# Line one
# Line two
print("Name:\tAlice")
# Name: Alice
path = "C:\\Users\\Alice"
print(path) # C:\Users\AlicePara desactivar el procesamiento de escapes por completo, prefija el string con r para crear un raw string — útil para expresiones regulares y rutas de Windows:
pattern = r"\d+\.\d+" # treated literally, no escaping needed
print(pattern) # \d+\.\d+Consulta el capítulo Escape Characters para ver la lista completa.
Formato de strings
Python ofrece varias formas de incorporar valores de variables dentro de strings.
f-strings (recomendado — Python 3.6+)
Un f-string se prefija con f o F. Las expresiones dentro de {} se evalúan en tiempo de ejecución:
name = "Alice"
age = 30
print(f"My name is {name} and I am {age} years old.")
# My name is Alice and I am 30 years old.
# Expressions work too
print(f"Next year I'll be {age + 1}.") # Next year I'll be 31.Método str.format()
Formato con porcentaje (%) (heredado)
El código Python más antiguo usa el formato %. Aún puedes encontrarlo, pero los f-strings son la preferencia moderna:
print("Hello, %s!" % "Dave") # Hello, Dave!
print("Pi ≈ %.2f" % 3.14159) # Pi ≈ 3.14Para un desglose completo de las opciones de formato, consulta los capítulos String Formatting y f-Strings.
Métodos de string más comunes
El tipo str de Python incluye docenas de métodos integrados. A continuación se muestran los más utilizados.
Conversión de mayúsculas y minúsculas
s = "Hello, World!"
print(s.upper()) # HELLO, WORLD!
print(s.lower()) # hello, world!
print(s.capitalize()) # Hello, world!
print(s.title()) # Hello, World!
print(s.swapcase()) # hELLO, wORLD!Búsqueda y conteo
s = "hello, world"
print(s.find("o")) # 4 — index of first 'o', or -1 if not found
print(s.rfind("o")) # 8 — index of last 'o'
print(s.count("l")) # 3 — total occurrences of 'l'
print(s.startswith("he")) # True
print(s.endswith("ld")) # TrueReemplazar subcadenas
s = "I like cats. Cats are great."
print(s.replace("cats", "dogs"))
# I like dogs. Cats are great. (only lowercase 'cats' replaced)
print(s.replace("cats", "dogs").replace("Cats", "Dogs"))
# I like dogs. Dogs are great.Eliminar espacios en blanco
padded = " hello "
print(padded.strip()) # 'hello' — both ends
print(padded.lstrip()) # 'hello ' — left end only
print(padded.rstrip()) # ' hello' — right end onlyDivisión y unión
csv = "apple,banana,cherry"
items = csv.split(",")
print(items) # ['apple', 'banana', 'cherry']
print(" | ".join(items)) # apple | banana | cherryVerificar el contenido de un string
Para la referencia completa, consulta el capítulo String Methods.
Inmutabilidad de los strings — Un error común
Los strings no se pueden modificar en su lugar. Intentar asignar a un índice genera un TypeError:
s = "hello"
# s[0] = "H" # TypeError: 'str' object does not support item assignmentPara cambiar una parte de un string, construye uno nuevo:
s = "hello"
s = "H" + s[1:] # slice off everything after index 0 and prepend "H"
print(s) # HelloLa variable s ahora apunta a un objeto string diferente — el "hello" original permanece sin cambios (y será recolectado por el recolector de basura si nada más lo referencia).
Strings vs. bytes
Un string de Python (str) contiene texto Unicode. Cuando necesitas datos binarios sin procesar — por ejemplo, para escribir en un archivo en modo binario o enviar datos por una red — usa bytes en su lugar:
b = b"hello" # bytes literal
s = b.decode("utf-8") # bytes → str
b2 = s.encode("utf-8") # str → bytes
print(type(b)) # <class 'bytes'>
print(type(s)) # <class 'str'>