Funciones para segmentar cadenas
Enumero aquí las principales funciones, ejemplificando su modo de uso, empezando por len().
La función o método len() permite conocer el número de caracteres que contiene una cadena; esto es, devuelve el entero de dicho valor,. En este recuento incluye los espacios que separan las palabras (en caso de tratarse de un string con varias palabras) y los signos de puntuación, que son considerados por len() también como caracteres.
print(len('Hola')) -> 4
print(len('Ho la')) -> 5
print(len('¡Hola!')) -> 6
Este método (len()) también evalúa variables que referencian string
print(len('Maria') -> 5
nom = 'Maria'
print(len(nom)) -> 5
cad1 = 'Los verdes prados de Oviedo'print('La cadena ' , cad1 , ' tiene ' , len(cad1), ' caracteres')
así como diferentes procedimientos de concatenación
print(f'La cadena {cad1} tiene {len(cad1)} caracteres')
print('La cadena {} tiene {} caracteres'.format(cad1,len(cad1)))
Si len() permite identificar el número de elementos de una cadena es porque una cadena se comporta como una lista de caracteres, motivo por el que cada carácter tiene asociado un índice en el string mediante el cual es posible acceder al carácter. Así, por ejemplo, para cad1
print(cad1[0]) -> L (primer elemento del string asignado a cad1)
print(cad1[-1]) -> o (último elemento del string asignado a cad1)
NOTA 1 -> Obsérvese que, en orden directo, la matriz de elementos se inicia en 0 y que los índices negativos permiten acceder a los elementos de la cadena en orden inverso.
NOTA 2 -> Esta cualidad de la cadena como lista de caracteres y el uso de funciones de formato pueden ser de gran interés para la manipulación de segmentos de cadena. Tendremos ocasión de verlo con más detalle en una entrada que complemente a esta.
Ahora ya sabemos que una cadena se puede descomponer en una lista de caracteres, que la función len() nos permite conocer cuántos son estos y que podemos acceder a cada uno de ellos solicitándolos por su índice.
Estos conocimientos son muy interesantes y es posible darles utilidad en el desarrollo de algoritmos de automatización de documentos. Pero no son las únicas utilidades que pueden tener utilidad en este ámbito de uso... ni en otros. Me estoy refiriendo en concreto a la utilidad que pueden tener dos métodos de trabajo con los componentes de una cadena: split() y join()
Método split() permite identificar los segmentos de una cadena, no los caracteres que la componen, sino las subcadenas en que se divide. Su sintaxis básica es la siguiente:
cadena.split(sep,maxsplit) donde...
- cadena es la cadena o variable string sobre la que se aplica split()
- sep es el argumento que identifica el carácter por el que se divide la cadena. Por defecto es el espacio (' ').
- mxsplit es el argumento que establece el número de veces en que deseamos dividir la cadena (o número de apariciones de sep que deseamos utilizar como referente para separar las subcadenas). Por defecto su valor es -1, que indica que deseamos utilizar todas las apariciones del carácter sep
Veamos algunos ejemplos utilizando cad1="Los verdes prados de Oviedo"
divide_cadena = cad1.split()print(divide_cadena) (1) -> ['Los', 'verdes', 'prados', 'de', 'Oviedo']divide_cadena = cad1.split(' ',2)print(divide_cadena) (2) -> ['Los', 'verdes', 'prados de Oviedo']divide_cadena = cad1.split('d',-1)print(divide_cadena) (3) -> ['Los ver', 'es' pra', 'os de Ovie', 'o']
- La formulación 'por defecto' (1) divide la cadena en las palabras que forma la frase.
- Cuando modificamos el parámetro mxsplit (2) obtenemos un número diferentes de secuencias. Concretamente 2 divide la cadena en tres partes: las resultantes de las dos primeras apariciones de sep (' ') ['los'] y ['verdes'] y el resto de la cadena ['prados de Oviedo']
- Si utilizamos otro criterio para sep (en 3 -> 'd'), manteniendo mxsplit por defecto (-1), obtenemos segmentos identificados en función de la aparición del carácter sep
Por eso dije subcadenas y no palabras, aunque es posible que, al menos inicialmente el uso más frecuente sea el establecido por defecto, esto es, la creación de la lista de las palabras que forman la frase.
El resultado 'normal' del método split() nos da acceso a una lista que va a sernos de mucha utilidad cuando queramos modificar el contenido de esa lista. Utilizaremos para ello lo que sabemos respecto al manejo de listas: acceso a elementos, sustracción, adición y sustitución de elementos... Pero es posible que esto sea tema para tratar en otra entrada, así que mejor completamos la actual hablando del método join()
El método join() sirve para invertir los efectos del método split(), esto es, para unir los elementos diferenciados de una lista en una única cadena. Veamos cómo:
divide_cadena = cad1.split() 1-> Divide la cadena cad1 y asigna divide_cadena
unir_cadena=' '.join(divide_cadena) 2-> Une divide_cadena y asigna a unir_cadena
print(divide_cadena) 3-> ['Los', 'verdes', 'prados', 'de', 'Oviedo']
print(unir_cadena) 4-> Los verdes prados de Oviedo
Si en vez de 2 escribimos el método join() precedido de '__' , obtendremos en 4 el siguientes resultado: Los__verdes__prados__de__Oviedo.