Tutorial

Cómo indexar y segmentar cadenas en Python 3

Published on March 19, 2021
Español
Cómo indexar y segmentar cadenas en Python 3

Introducción

Los tipos de datos cadena de Python es una secuencia formada por uno o más caracteres individuales que pueden ser caracteres de letras, números, espacios en blanco o símbolos. Dado que una cadena es una secuencia, se puede acceder a ella de la misma manera que a otros tipos de datos basados en secuencias, mediante la indexación y la segmentación.

Este tutorial explicará cómo acceder a las cadenas a través de la indexación, segmentándolas en secuencias de caracteres, y repasará algunos métodos de recuento y ubicación de caracteres.

Cómo indexar cadenas.

Al igual que el tipo de datos de lista que tiene elementos que corresponden a un número de índice, cada uno de los caracteres de una cadena también corresponde a un número de índice, comenzando por el número de índice 0.

En el caso de la cadena Sammy Shark! el desglose del índice tiene el siguiente aspecto:

S a m m y S h a r k !
0 1 2 3 4 5 6 7 8 9 10 11

Como puede ver, la primera S comienza en el índice 0 y la cadena termina en el índice 11 con el símbolo ! .

También observamos que el carácter de espacio en blanco entre Sammy y Shark también se corresponde con su propio número de índice. En este caso, el número de índice asociado con el espacio en blanco es 5.

El punto de exclamación (!) también tiene un número de índice asociado con él. Cualquier otro símbolo o signo de puntuación, como *#$&. ;?, también es un carácter y estaría asociado a su propio número de índice.

El hecho de que cada carácter de una cadena de Python tenga un número de índice correspondiente permite acceder y manipular las cadenas de la misma manera que se puede hacer con otros tipos de datos secuenciales.

Acceso a caracteres según el número de índice positivo

Al hacer referencia a los números del índice, se puede aislar uno de los caracteres de una cadena. Eso se hace poniendo los números de índice entre corchetes. Declaremos una cadena, imprimámosla e invoquemos el número de índice entre corchetes:

ss = "Sammy Shark!"
print(ss[4])
Output
y

Cuando nos referimos a un número de índice concreto de una cadena, Python devuelve el carácter que se encuentra en esa posición. Dado que la letra y está en el número de índica 4 de la cadena ss = "Sammy Shark!", cuando imprimimos ss[4] recibimos y como resultado.

Los números de índice nos permiten acceder a caracteres específicos dentro de una cadena.

Acceso a caracteres según el número de índice negativo

Si tenemos una cadena larga y queremos localizar un elemento al final, también podemos contar hacia atrás desde el final de la cadena, comenzando en el número de índice -1.

En el caso de la misma cadena Sammy Shark!, el desglose del índice negativo tiene el siguiente aspecto:

S a m m y S h a r k !
-12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

Usando números de índice negativos, podemos imprimir el carácter r, haciendo referencia a su posición en el índice -3, como se muestra a continuación:

print(ss[-3])
Output
r

Usar números de índice negativos puede ser ventajoso para aislar un solo carácter al final de una cadena larga.

Segmentación de cadenas

También podemos invocar un rango de caracteres de la cadena. Digamos que solo queremos imprimir la palabra Shark. Podemos hacerlo creando una rebanada, que es una secuencia de caracteres dentro de una cadena original. Con las rebanadas, podemos invocar varios valores de caracteres creando un rango de números de índice separados por dos puntos [x:y]:

print(ss[6:11])
Output
Shark

Cuando se crea una rebanada, como en [6:11], el primer número de índice es donde comienza la rebanada (inclusivo), y el segundo número de índice es donde termina la rebanada (exclusivo), que es el motivo por el que en nuestro ejemplo anterior el rango tiene que ser el número de índice que ocurriría justo después de que la cadena termine.

Cuando se segmentan cadenas, se está creando una subcadena, que es esencialmente una cadena que existe dentro de otra cadena. Cuando invocamos ss[6:11], invocamos la subcadena Shark que existe dentro de la cadena Sammy Shark!.

Si queremos incluir cualquiera de los extremos de una cadena, podemos omitir uno de los números en la sintaxis string[n:n]. Por ejemplo, si queremos imprimir la primera palabra de cadena ss, — “Sammy” — , podemos hacerlo escribiendo lo siguiente:

print(ss[:5])
Output
Sammy

Para eso, omitimos el número de índice antes de los dos puntos en la sintaxis de la rebanada y solo incluimos el número de índice después de los dos puntos, que hace referencia al final de la subcadena.

Para imprimir una subcadena que comienza en el medio de una cadena y se imprime hasta el final, podemos hacerlo incluyendo solo el número de índice antes de los dos puntos, como se muestra a continuación:

print(ss[7:])
Output
hark!

Al incluir solo el número de índice antes de los dos puntos y dejar el segundo número de índice fuera de la sintaxis, la subcadena irá desde el carácter del número de índice invocado hasta el final de la cadena.

También puede usar números de índice negativos para segmentar una cadena. Como ya mencionamos anteriormente, los números de índice negativos de una cadena comienzan en -1 y se cuentan hacia abajo desde ahí hasta llegar al inicio de la cadena. Al utilizar números de índice negativos, empezaremos por el número más bajo, ya que aparece antes en la cadena.

Utilicemos dos números de índice negativos para segmentar la cadena ss:

print(ss[-4:-1])
Output
ark

La subcadena “ark” se imprime a partir de la cadena “Sammy Shark!” porque el carácter “a” aparece en la posición del número de índice -4, y el carácter “k” aparece justo antes de la posición del número de índice -1.

Especificación de zancadas mientras se segmenta la cadena

La segmentación de cadenas puede aceptar un tercer parámetro además de dos números de índice.  El tercer parámetro especifica la zancada, que hace referencia a la cantidad de caracteres que se deben seguir después de recuperar el primer carácter de la cadena. Hasta ahora, hemos omitido el parámetro zancada y Python utiliza por defecto la zancada de 1, de modo que cada carácter entre dos números de índice se recupere.

Veamos nuevamente el ejemplo anterior que imprime la subcadena “Shark”:

print(ss[6:11])
Output
Shark

Podemos obtener los mismos resultados incluyendo un tercer parámetro con una zancada de 1:

print(ss[6:11:1])
Output
Shark

Por lo tanto, una zancada de 1 tomará cada carácter entre dos números de índice de una rebanada. Si omitimos el parámetro de zancada, Python pondrá por defecto 1.

Si, en cambio, aumentamos la zancada, veremos que se saltan caracteres:

print(ss[0:12:2])
Output
SmySak

Especificar la zancada de 2 como el último parámetro en la sintaxis de Python, ss[0:12:2] se salta cualquier otro carácter. Veamos los caracteres que aparecen en rojo:

Sammy Shark!

Tenga en cuenta que el carácter de espacio en blanco en el número de índice 5 también se salta con una zancada de 2 especificada.

Si usamos un número más grande para nuestro parámetro de zancada, tendremos una subcadena significativamente más pequeña:

print(ss[0:12:4])
Output
Sya

Especificar la zancada de 4 como el último parámetro en la sintaxis de Python, ss[0:12:4] se imprime solo uno de cada cuatro caracteres. De nuevo, veamos los caracteres que aparecen en rojo:

Sammy Shark!

En este ejemplo, también se omite el carácter de espacio en blanco.

Dado que estamos imprimiendo toda la cadena, podemos omitir los dos números de índice y mantener los dos puntos dentro de la sintaxis para conseguir el mismo resultado:

print(ss[::4])
Output
Sya

Si se omiten los dos números de índice y se conservan los dos puntos, se mantendrá toda la cadena dentro del rango, mientras que si se añade un parámetro final para la zancada se especificará el número de caracteres que se van a saltar.

Además, puede indicar un valor numérico negativo para la zancada, que podemos utilizar para imprimir la cadena original en orden inverso si establecemos la zancada en -1:

print(ss[::-1])
Output
!krahS ymmaS

Los dos puntos sin parámetro especificado incluirán todos los caracteres de la cadena original, una zancada de 1 incluirá todos los caracteres sin saltárselos, y la negación de esa zancada invertirá el orden de los caracteres.

Hagamos esto de nuevo pero con una zancada de -2:

print(ss[::-2])
Output
!rh ma

En este ejemplo, ss[::-2], estamos tratando con la totalidad de la cadena original, ya que no se incluyen números de índice en los parámetros e invirtiendo la cadena a través de la zancada negativa. Además, al tener una zancada de -2 estamos saltando una de cada dos letras de la cadena invertida:

! krahS[espacio en blanco]ymmaS

El carácter de espacio en blanco se imprime en este ejemplo.

Cuando especifica el tercer parámetro de la sintaxis de segmentación de Python, está indicando la zancada de la subcadena que está sacando de la cadena original.

Métodos de conteo

Mientras pensamos en los números de índice relevantes que corresponden a los caracteres dentro de las cadenas, vale la pena repasar algunos de los métodos que cuentan cadenas o devuelven números de índice. Esto puede ser útil para limitar el número de caracteres que queremos aceptar dentro de un formulario de entrada del usuario, o para comparar cadenas. Igual que otros tipos de datos secuenciales, las cadenas se pueden segmentar mediante diversos métodos.

Primero, veremos el método len() que puede obtener la longitud de cualquier tipo de datos que sea una secuencia, ya sea ordenada o desordenada, incluyendo cadenas, listas, tuplas y diccionarios.

Vamos a imprimir la longitud de la cadena ss:

print(len(ss))
Output
12

La longitud de la cadena “Sammy Shark!” es de 12 caracteres de largo, incluyendo el carácter de espacio en blanco y el símbolo de exclamación.

En vez de usar una variable, también podemos pasar una cadena directamente al método len():

print(len("Let's print the length of this string."))
Output
38

El método len() cuenta el número total de caracteres dentro de una cadena.

Si queremos contar el número de veces que aparece un carácter en particular o una secuencia de caracteres en una cadena, podemos hacerlo con el método str.count(). Usemos nuestra cadena ss = "Sammy Shark!" y contemos el número de veces que aparece el carácter “a”:

print(ss.count("a"))
Output
2

Podemos buscar otro carácter:

print(ss.count("s"))
Output
0

Aunque la letra “S” está en la cadena, es importante tener en cuenta que cada carácter distingue entre mayúsculas y minúsculas. Si queremos buscar todas las letras de una cadena independientemente de las mayúsculas y minúsculas, podemos usar el método str.lower() para convertir todos los caracteres de la cadena en mayúsculas primero. Puede obtener más información sobre este método en “Introducción a los métodos de cadena en Python 3”.

Probemos str.count() con una secuencia de caracteres:

likes = "Sammy likes to swim in the ocean, likes to spin up servers, and likes to smile."
print(likes.count("likes"))
Output
3

En la cadena likes, la secuencia de caracteres que equivale a “likes” aparece 3 veces en la cadena original.

También podemos encontrar en qué posición de la cadena aparece un carácter o secuencia de caracteres. Podemos hacerlo con el método str.find() y devolverá la posición del carácter según el número de índice.

Podemos comprobar dónde aparece la primera “m” en la cadena ss:

print(ss.find("m"))
Ouput
2

El primer carácter “m” aparece en la posición de índice de 2 en la cadena “Sammy Shark!” Podemos revisar las posiciones del número de índice de la cadena ss anterior.

Veamos dónde se encuentra la primera secuencia de caracteres “likes” en la cadena likes:

print(likes.find("likes"))
Ouput
6

La primera instancia de la secuencia de caracteres “likes” comienza en la posición del número de índice 6, que es donde se encuentra el carácter I de la secuencia likes.

¿Qué pasa si queremos ver dónde comienza la segunda secuencia de “likes”? Podemos hacerlo pasando un segundo parámetro al método str.find() que comenzará en un número de índice determinado. Por lo tanto, en vez de comenzar por el principio de la cadena, vamos a comenzar después del número de índice 9:

print(likes.find("likes", 9))
Output
34

En este segundo ejemplo que comienza en el número de índice 9, la primera aparición de la secuencia de caracteres “likes” comienza en el número de índice 34.

Además, podemos especificar un final al rango como tercer parámetro. Igual que la segmentación, podemos hacerlo contando hacia atrás usando un número de índice negativo:

print(likes.find("likes", 40, -6))
Output
64

Este último ejemplo busca la posición de la secuencia “likes” entre los números de índice 40 y -6. Dado que el último parámetro ingresado es un número negativo, se contará desde el final de la cadena original.

Los métodos de cadena de len(), str.count() y str.find() pueden usarse para determinar la longitud, el conteo de caracteres o secuencias de caracteres, y las posiciones de índice de los caracteres o secuencias de caracteres dentro de las cadenas.

Conclusión

Poder invocar números de índice específicos de cadenas o una porción en particular de una cadena, brinda una mayor flexibilidad al trabajar con este tipo de datos. Dado que las cadenas, como las listas y las tuplas son un tipo de datos basados en secuencias, se puede acceder a ella mediante la indexación y la segmentación.

Puede obtener más información sobre el formato de las cadenas y los métodos de cadena para continuar aprendiendo sobre las cadenas.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more