One place for hosting & domains

      segmentar

      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.



      Source link