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.
Buenísimo, felicidades por el post. El aprendizaje es mejor si es divertido 🙂 sigue así, los mas grandes son como tu aquí.
¡Caramba, gracias por tus palabras Edgar!
Esto me recuerda que hace bastante que no escribo sobre Python. A ver si en los próximos días publico un nuevo artículo.
Saludos
Muy útil y bien explicado, gracias!!
Gracias por pasarte. Me alegro de que te haya servido.
Saludos
Hombre mis respetos muy bien explicado.
Muy bueno, perfectamente explicado. Soy nuevo en esto de la programación y tengo un pequeño problema que no he podido resolver, te explico, tal vez puedas tirarme un cable. Introduce una oración, por ejemplo: «El perro de Luis esta mas gordo que el de María», El programa debe de dar salida solo las palabras con mayúsculas, es decir, en este caso debe imprimir: El, Luis, María.
Se que tu post tiene tiempo, pero confío que aún lo leas.
Gracias
Hola Mauricio, yo estoy en nivel -1 de Python por lo que no se si responderé correctamente, pero bueno… espero que te sirva
>>> s=’El perro de Luis esta mas gordo que el de Maria’
>>> Palabra = [palabra for palabra in s.split() if palabra[0].isupper()]
Seguramente hay mejores y más elegantes maneras de hacerlo, pero a mi me funcionó
Pase horas buscando esto o algo parecido, GRACIAS!!
Excelente la analogía del billete para explicar todo sobre split! Excelente aporte
Que grande. Da gusto leer el post.
Muy preciso. Excelente ejemplo!!!