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.