W3docs

Segmentación de cadenas

Aprende la segmentación de cadenas en Python con sintaxis, diagramas de índices, valores de paso, índices negativos y ejemplos prácticos del mundo real.

Segmentación de cadenas en Python

La segmentación de cadenas te permite extraer una subcadena de una cadena más larga especificando dónde empezar, dónde terminar y cuántos caracteres saltar cada vez. Es una de las operaciones de cadenas más comunes en Python y se utiliza en todas partes, desde el análisis de nombres de archivos hasta la inversión de palabras.

Este capítulo cubre:

  • La sintaxis [start:stop:step] y cómo los índices se mapean a caracteres
  • Omitir start o stop (segmentar desde el principio o hasta el final)
  • Índices negativos (contando desde la derecha)
  • El parámetro step (saltar caracteres, invertir una cadena)
  • Errores comunes: índices fuera de rango, segmentos vacíos
  • Ejemplos prácticos que puedes ejecutar de inmediato

Si eres nuevo con las cadenas en Python, lee primero el capítulo Python Strings — explica cómo se crean y se indexan las cadenas.

Cómo funcionan los índices de cadenas

Cada carácter en una cadena de Python tiene dos índices: uno positivo (contando desde la izquierda, comenzando en 0) y uno negativo (contando desde la derecha, comenzando en -1).

Para la cadena "Hello, World!":

 H   e   l   l   o   ,       W   o   r   l   d   !
 0   1   2   3   4   5   6   7   8   9  10  11  12   ← positive
-13 -12 -11 -10  -9  -8  -7  -6  -5  -4  -3  -2  -1  ← negative

La sintaxis completa de segmentación es:

string[start:stop:step]
  • start — índice del primer carácter a incluir (por defecto: 0)
  • stop — índice del primer carácter a excluir (por defecto: fin de la cadena)
  • step — cuántos caracteres avanzar cada vez (por defecto: 1)

El índice stop es exclusivo — el carácter en stop nunca se incluye en el resultado.

Segmentación básica de cadenas

Proporciona un índice de inicio y uno de fin separados por dos puntos para extraer los caracteres entre ellos.

python— editable, runs on the server

my_string[0:3] devuelve los caracteres en las posiciones 0, 1 y 2 — el carácter en el índice 3 ('l') no se incluye.

Omitir el inicio o el fin

Omite start para comenzar desde el primer carácter, o omite stop para continuar hasta el último carácter.

python— editable, runs on the server

my_string[:] es un idioma común para copiar una cadena (aunque las cadenas son inmutables en Python, por lo que simplemente devuelve el mismo valor).

Índices negativos

Los índices negativos cuentan hacia atrás desde el final de la cadena. -1 hace referencia al último carácter, -2 al penúltimo, y así sucesivamente.

python— editable, runs on the server

Un patrón útil: my_string[-n:] siempre te da los últimos n caracteres, independientemente de la longitud de la cadena.

El parámetro step

El tercer argumento del segmento es el paso. Controla cuántas posiciones avanza Python después de cada carácter que selecciona.

python— editable, runs on the server

Invertir una cadena

Establece el paso en -1 para iterar de derecha a izquierda. Esta es la forma idiomática de invertir una cadena en Python:

python— editable, runs on the server

Puedes combinar un paso negativo con índices de inicio y fin. Recuerda: cuando el paso es negativo, start debe ser mayor que stop.

my_string = "Hello, World!"
print(my_string[10:2:-1])  # 'lroW ,ol' — from index 10 down to (not including) index 2

Consulta el capítulo Reverse a String para más técnicas, incluyendo reversed() y ''.join().

Combinar start, stop y step

Las tres partes funcionan juntas. Piensa en el segmento como un bucle for que comienza en start, se detiene antes de stop e incrementa en step.

python— editable, runs on the server
python— editable, runs on the server

Índices fuera de rango

A diferencia del acceso directo por índice (que lanza un IndexError para un índice fuera de rango), la segmentación maneja los valores fuera de rango de forma segura ajustándolos a los límites de la cadena.

my_string = "Hello, World!"

# Stop index beyond the string length — no error
print(my_string[7:100])  # 'World!'

# Start index beyond the string length — returns empty string
print(my_string[50:60])  # ''

# Direct index access would raise IndexError:
# print(my_string[100])  # IndexError: string index out of range

Esto hace que la segmentación sea segura para patrones del tipo "dame hasta N caracteres" sin necesidad de verificar len() primero.

Ejemplos prácticos

Extraer la extensión de un archivo

filename = "report.pdf"
extension = filename[-3:]
print(extension)  # 'pdf'

Extraer el dominio de una dirección de correo electrónico

email = "[email protected]"
at_index = email.index("@")
domain = email[at_index + 1:]
print(domain)  # 'example.com'

Truncar una cadena larga con puntos suspensivos

def truncate(text, max_length):
    if len(text) <= max_length:
        return text
    return text[:max_length - 3] + "..."

print(truncate("Hello, World!", 8))   # 'Hello...'
print(truncate("Hi", 8))             # 'Hi'

Verificar si una cadena es un palíndromo

word = "racecar"
is_palindrome = word == word[::-1]
print(is_palindrome)  # True

Referencia rápida

ExpresiónSignificado
s[a:b]Caracteres desde el índice a hasta (sin incluir) b
s[:b]Desde el inicio hasta (sin incluir) b
s[a:]Desde el índice a hasta el final
s[:]Copia completa
s[a:b:n]Cada n-ésimo carácter desde a hasta b
s[::-1]Cadena invertida
s[-n:]Últimos n caracteres
s[:-n]Todo excepto los últimos n caracteres

Qué leer a continuación

Práctica

Práctica
¿Qué devuelve el segmento `s[2:5]` para la cadena `'Python'`?
¿Qué devuelve el segmento `s[2:5]` para la cadena `'Python'`?
Was this page helpful?