Python – Troceando y recomponiendo strings

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ó


Python – Troceando y recomponiendo strings


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.

11 opiniones en “Python – Troceando y recomponiendo strings”

  1. Buenísimo, felicidades por el post. El aprendizaje es mejor si es divertido 🙂 sigue así, los mas grandes son como tu aquí.

    1. ¡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

  2. 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

    1. 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ó

Deja un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies