Objetivo: presentar los métodos split() y join() para descomponer y recomponer strings, respectivamente.
Voy a enseñarte un sencillo truco de magia que puedes agregar a tu kit de herramientas en Python y que sin duda te será de gran utilidad en tu día a día como programador.
Para ello voy a necesitar tu colaboración. Confía en mí y déjame un billete, el de más valor que tengas. Ese mismo de color púrpura, por ejemplo, servirá.
>>> billete = 'Esto es un billete de 500 euros'
(No he visto un billete de 500 euros en mi vida. He tenido que recurrir a la wikipedia para consultar su color).
Ahora voy a romperlo delante de tus narices:
>>> trocitos_de_billete = billete.split()
>>> trocitos_de_billete
['Esto', 'es', 'un', 'billete', 'de', '500', 'euros']
O al menos lo era.
El método split(), aplicado a un string, crea una lista en la que cada elemento es una palabra del string. Como si de una butifarra se tratase, split()
ha troceado la cadena de caracteres en sus palabras individuales y las ha guardado en una lista.
El modo de reconocer donde acaba y empieza una palabra es obvio: no tiene más que localizar cada espacio en blanco de separación y romper ahí.
Lo interesante de split()
es que no le importa si hay más espacios en blancos de los debidos:
>>> dicho = 'Las palabras se las lleva el viento'
>>> dicho.split()
['Las', 'palabras', 'se', 'las', 'lleva', 'el', 'viento']
Ni siquiera si esos espacios son tabuladores o saltos de línea:
>>> misterio = 'Dónde\testán\t\tlas llaves\nmatarile\nmatarile'
>>> print(misterio)
Dónde están las llaves
matarile
matarile
>>>
>>> misterio.split()
['Dónde', 'están', 'las', 'llaves', 'matarile', 'matarile']
Para él es como si fueran un único espacio.
El método split()
nos permite ciertas opciones de juego. Podemos, por ejemplo, indicar que el separador sea otro en lugar del espacio en blanco:
>>> gazpacho = 'tomate-pepino-pimiento-aceite-vinagre'
>>> gazpacho.split('-')
['tomate', 'pepino', 'pimiento', 'aceite', 'vinagre']
Algo que no tiene por qué limitarse a un único carácter:
>>> extensiones = '201abc202abc203'
>>> extensiones.split('abc')
['201', '202', '203']
También podemos precisar el número de veces que meteremos el cuchillo:
>>> python = '1 Python Programas Generador de claves aleatorias'
>>> python.split(' ', 3)
['1', 'Python', 'Programas', 'Generador de claves aleatorias']
Observa que, al necesitar el segundo parámetro, me he visto obligado a indicar el primero, el separador.
Pero podría haberlo obviado del siguiente modo:
>>> python.split(maxsplit = 3)
['1', 'Python', 'Programas', 'Generador de claves aleatorias']
Planteemos ahora el problema inverso: dada una lista de strings, fusionarla en una única cadena empleando determinado carácter como separador.
Los objetos de tipo string disponen de un método que logra precisamente eso: join().
Percátate de una sutileza en la frase anterior: he dicho que el método join()
es propio del tipo string y no del tipo list. Por lo tanto no se puede aplicar sobre una lista sino sobre un string.
Entonces, si disponemos de dos elementos, la lista que queremos concatenar y el separador, ¿sobre cuál de ellos aplicaremos el join()
? Sobre el separador, no hay otra opción, facilitando como argumento la lista.
>>> estaciones = ['Primavera', 'Verano', 'Otoño', 'Invierno']
>>> ' '.join(estaciones)
'Primavera Verano Otoño Invierno'
El separador puede ser cualquier string, obviamente:
>>> ' <---> '.join(estaciones)
'Primavera <---> Verano <---> Otoño <---> Invierno'
Volvamos entonces a nuestro truco de magia, con el billete de quinientos euros destrozado:
>>> trocitos_de_billete
['Esto', 'es', 'un', 'billete', 'de', '500', 'euros']
Reconstruirlo es tan simple como esto:
>>> billete_reconstruido = ' '.join(trocitos_de_billete)
>>> billete_reconstruido
'Esto es un billete de 500 euros'
Naturalmente, todo ha sido un truco. Aunque me vieras romper el billete delante de tus narices, eso nunca sucedió. El billete original, como en todos los buenos trucos, nunca sufrió daño alguno:
>>> billete
'Esto es un billete de 500 euros'
Javier Montero Gabarró
El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)
El Club del Autodidacta
Consulta el índice completo de artículos relacionados con Python.