Concatenar en Python: Cómo concatenar y formatear strings en Python

como concatenar y formatear strings python

Una de las operaciones más comunes en cualquier lenguaje de programación es la concatenación y/o combinación de cadenas. En este tutorial descubrirás distintos modos de concatenar en python dos o más strings.

Concatenar strings en Python usando el operador ‘+’

Como veremos a lo largo de este post, en Python existen varias formas de concatenar dos o más objetos de tipo string. La más sencilla es usar el operador +. Concatenar dos o más strings con el operador + da como resultado un nuevo string.

Veámoslo con un ejemplo:

>>> nombre = 'Juan José'
>>> apellidos = 'Lozano Gómez'
>>> nombre_completo = nombre + apellidos
>>> nombre_completo
'Juan JoséLozano Gómez'

Como podemos observar, para concatenar dos cadenas con el operador + simplemente necesitamos dos objetos de tipo string. Estos objetos pueden estar almacenados en memoria (usando una variable como en el ejemplo), ser un literal e incluso ser el valor devuelto por una función.

>>> saludo = 'Hola '
>>> hola = saludo + 'J2logo'
>>> hola
'Hola J2logo'

Como he indicado en el párrafo anterior, para concatenar varios strings en Python necesitamos que todos los elementos sean de este tipo. Si tratamos de concatenar, por ejemplo, un string con un int, el intérprete lanzará un error:

>>> suma = 1 + 2
>>> suma
3
>>> res = 'El resultado de 1 + 2 es: ' + suma
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str

Para poder concatenar los valores anteriores tienes que convertir suma a un objeto de tipo string. Para ello puedes usar el método str(), que devuelve una representación de tipo string del objeto que se le pasa como parámetro.

>>> suma = 1 + 2
>>> suma
3
>>> res = 'El resultado de 1 + 2 es: ' + str(suma)
>>> res
'El resultado de 1 + 2 es: 3'

También es posible concatenar más de dos strings a la vez:

>>> print('Suma: ' + str(1) + ' + 2 = ' + str(1 + 2))
Suma: 1 + 2 = 3

No obstante, los dos últimos ejemplos que te he enseñado no son los más «apropiados». Existen opciones más legibles en Python como te mostraré a continuación.

Formatear strings en Python usando el operador ‘%’

Formatear strings en Python usando el operador % es el modo tradicional, muy similar a la función printf del lenguaje C.

Básicamente, en la cadena se define un lugar (en el que se especifica un marcador de tipo) que será sustituido posteriormente por un valor:

>>> nombre = 'J2logo'
>>> 'Hola %s' % nombre
'Hola J2logo'

En el ejemplo anterior, el lugar indicado por %s para será sustituido por el string nombre.

Si nos fijamos en el script que mostraba el resultado de una suma de la sección anterior, lo podemos mejorar del siguiente modo:

>>> def print_suma(x, y):
...     return 'El resultado de %i e %i es: %i' % (x, y, x+y)
... 
>>> print_suma(1, 2)
'El resultado de 1 e 2 es: 3'

❗️ Es importante tener en cuenta que los valores son sustituidos en el mismo orden en que se indican.

Si quieres conocer todos los posibles tipos de conversión usando el estilo printf, puedes consultar la documentación oficial de Python aquí.

Nuevo estilo: formatear strings usando el método ‘format’

Python 3 y posteriormente Python 2.7 introdujeron una nuevo modo de formatear cadenas a través del método format disponible en cualquier objeto de tipo string.

Se puede hacer uso de este método del mismo modo que se hacía con el método tradicional, es decir, sustituyendo valores en función de la posición a través del marcador {}:

>>> var1 = 'J2logo'
>>> var2 = 'Hola'
>>> '{} {}, ¿cómo estás?'.format(var2, var1)
'Hola J2logo, ¿cómo estás?'

Pero también puedes especificar el nombre de las variables, de manera que el orden en el que se pasen los argumentos al llamar a format no importa:

>>> var1 = 'J2logo'
>>> var2 = 'Hola'
>>> '{var2} {var1}, ¿cómo estás?'.format(var1=var1, var2=var2)
'Hola J2logo, ¿cómo estás?'

O indicando el índice de los parámetros al invocar al método format:

>>> var1 = 'J2logo'
>>> var2 = 'Hola'
>>> '{1} {0}, ¿cómo estás?'.format(var1, var2)
'Hola J2logo, ¿cómo estás?'

Usando f-Strings en Python 3.6+

A partir de la versión 3.6 de Python, el lenguaje introdujo un nuevo modo de formatear strings que es más eficiente que todos los que hemos visto anteriormente. Son las cadenas literales formateadas o f-Strings.

Esta nueva forma de formatear cadenas, permite embeber expresiones dentro de una constante de tipo string. Por ejemplo:

nombre = 'J2logo'
f'Hola {nombre}'
'Hola J2logo'

Otro ejemplo:

>>> def print_suma(x, y):
...     return f'El resultado de {x} + {y} es: {x + y}'
... 
>>> print_suma(1, 2)
'El resultado de 1 + 2 es: 3'

Como ves, las f-Strings comienzan siempre con el literal f y, aunque su comportamiento pueda parecer muy similar a los métodos vistos previamente, internamente su implementación hace que esta forma sea la más rápida para concatenar cadenas.

Concatenar una lista de Strings con join

Por último, si dispones de una lista de strings, puedes hacer uso del método join para concatenar los distintos valores en un único string.

>>> cadenas = ['Hola', 'j2logo', ',', '¿cómo', 'estás?']
>>> ' '.join(cadenas)
'Hola j2logo , ¿cómo estás?'

Como puedes observar, el literal con el que se llama a join es lo que se utiliza para separar los distintos elementos de la cadena.

>>> numeros = ['1', '2', '3']
>>> ', '.join(numeros)
'1, 2, 3'

🎯 Conclusiones

Python ofrece varias formas de concatenar y formatear strings. Utilizar una u otra dependerá del código en cuestión, de cómo sea más legible y de la versión de Python que estés usando. Personalmente, si tu versión de Python es la 3.6+, usaría f-Strings siempre que fuera posible para formatear cadenas. Si te encuentras con código legacy (código antiguo), quizá sea más correcto emplear el estilo antiguo para mantener la coherencia con el resto del código.

La imagen de la cabecera es obra de rawpixel.com

¿Quieres ser expert@ en Python? Recibe trucos Python y las últimas novedades del blog

¡Eyyy! Esto también te puede interesar 👇

* Te informo de que los datos de carácter personal que proporciones al comentar serán tratados por Juan José Lozano Gómez como responsable de esta web. La Finalidad es moderar los comentarios. La Legitimación es gracias a tu consentimiento. Destinatarios: tus datos se encuentran alojados en Disqus (disqus.com), mi sistema de comentarios, que está acogido al acuerdo de seguridad EU-US Privacy. Podrás ejercer Tus Derechos de Acceso, Rectificación, Limitación o Suprimir tus datos enviando un email a juanjo@j2logo.com. Encontrarás más información en la POLÍTICA DE PRIVACIDAD.

Sobre j2logo

j2logo profile

Quiero ayudarte a que seas mejor programador/a, pero no uno cualquiera, sino uno de los top.

¿Quieres ser expert@ en Python? 🐍

❤️ He ayudado a miles de programadores/as como tú a ser mejores Pythonistas

📩 Recibe de vez en cuando trucos y scripts Python y las últimas novedades del blog

* Al enviar el formulario confirmas que aceptas la POLITICA DE PRIVACIDAD

¿Quieres ser expert@ en PYTHON?

j2logo-pythonistas

❤️ He ayudado a miles de programadores/as como tú

📩 Recibe trucos, scripts y las novedades del blog

¿Quieres dominar Python?

Python, Guía para ser un Pythonista

El curso con el que aprender el lenguaje desde cero. Con mi soporte y ayuda.

OFERTA BLACK FRIDAY

35% de descuento