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.
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.
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])
Outputy
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.
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])
Outputr
Usar números de índice negativos puede ser ventajoso para aislar un solo carácter al final de una cadena larga.
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])
OutputShark
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])
OutputSammy
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:])
Outputhark!
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])
Outputark
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.
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])
OutputShark
Podemos obtener los mismos resultados incluyendo un tercer parámetro con una zancada de 1:
print(ss[6:11:1])
OutputShark
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])
OutputSmySak
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])
OutputSya
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])
OutputSya
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.
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))
Output12
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."))
Output38
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"))
Output2
Podemos buscar otro carácter:
print(ss.count("s"))
Output0
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"))
Output3
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"))
Ouput2
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"))
Ouput6
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))
Output34
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))
Output64
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.
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.
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!