Cómo concatenar cadenas en Python

En este tutorial, veremos cómo unir, concatenar o agregar cadenas en Python usando varios operadores, el método join() y un método de unión personalizado para cubrir los casos extremos.

Introducción

En este breve tutorial, veremos cómo concatenar cadenas en Python, a través de algunos enfoques diferentes.

Vale la pena señalar que las cadenas en Python son inmutables: un objeto de cadena en la memoria no se puede cambiar una vez creado:

1
newString = "Some new string"

Si desea cambiar esta cadena de alguna manera, bajo el capó, se crea una nueva cadena con esos cambios. Lo mismo se aplica a la concatenación de cadenas: se debe crear un nuevo objeto en la memoria.

Concatenación de cadenas y adición de cadenas

Concatenación de cadenas se refiere a unir dos o más cadenas, como si fueran eslabones de una cadena. Puede concatenar en cualquier orden, como concatenar str1 entre str2 y str3.

Agregar cadenas se refiere a agregar una o más cadenas al final de otra cadena.

En algunos casos, estos términos son absolutamente intercambiables. Agregar cadenas es la misma operación que concatenar cadenas al final de otra. Comencemos con la forma más sencilla de concatenar/añadir dos (o más) cadenas.

Concatenar o agregar cadenas con el operador + {#concatenar o agregar cadenas con el operador}

En Python, una cadena es una lista de caracteres, lo que significa que el operador + se puede usar para agregar sus elementos constituyentes en una nueva lista:

1
2
3
4
5
title = "Prof. "
name = "Richard Feynman"

result = title + name
print(result)

Esto resulta en:

1
Prof. Richard Feynman

Este operador no limita la cantidad de cadenas que se pueden agregar, por lo que puede unir fácilmente una gran cantidad de cadenas:

1
2
3
4
5
6
string1 = "Concatenating"
string2 = "strings"
string3 = "in Python"
string4 = "is easy!"

print(string1 + string2 + string3 + string4)

Sin embargo, si su objetivo es construir una oración a partir de una lista de cadenas como esta, concatenarlas manualmente y sin caracteres especiales es ineficiente y produce un resultado ininteligible:

1
Concatenatingstringsin Pythonis easy!

Sería mucho más sensato iterar a través de una lista de cadenas y agregarlas junto con un espacio en blanco entre cada cadena concatenada:

1
2
3
4
5
6
7
strings = ["Concatenating", "strings", "in Python", "is easy!"]

result = ""
for string in strings:
    result += string + " "

print(result)

Esto resulta en:

1
Concatenating strings in Python is easy! 

Un operador abreviado que puede usar para concatenar dos cadenas es +=, como en el ejemplo anterior. Esto le ahorra la molestia de tener que crear una nueva variable para almacenar los resultados, ya que puede reutilizar una de las variables de referencia existentes para asignarla al nuevo objeto en la memoria:

1
2
3
4
5
string1 = "one"
string2 = "two"

string1 += string2
print(string1) # Output: onetwo

Limitación del Operador +

La principal limitación del operador + es el hecho de que no puede mezclar y combinar tipos. No puede agregar un número entero a una lista de caracteres, por ejemplo:

1
print("some string" + 2)

Muchos lenguajes, como JavaScript y Java, se dan cuenta de esto y convierten automáticamente el número entero en una cadena (coincidencia de los tipos) y realizan la concatenación, aunque Python arroja un TypeError:

1
TypeError: can only concatenate str (not "int") to str

Sin embargo, existe una solución sencilla: puede utilizar la función integrada str() de Python, que convierte los tipos de datos compatibles en una cadena. Agreguemos algunos números enteros a nuestra lista de cadenas y encuadremos todos los elementos con str() en caso de que haya elementos que no sean cadenas:

1
2
3
4
5
6
7
strings = ["Concatenating", "strings", "in Python", "is easy!", 5, 2]

result = ""
for string in strings:
    result += str(string) + " "

print(result)

Esto resulta en:

1
Concatenating strings in Python is easy! 5 2 

Concatenar o agregar cadenas con el operador * {#concatenar o agregar cadenas con el operador}

Si desea crear una nueva cadena replicando una cadena n veces y agregándola, puede lograrlo con el operador *:

1
2
3
string = "w"

print(string * 3) # Output: www

Esto puede ser aún más útil cuando se combina con el operador +:

1
print("w"*3 + "." + "wikihtp.com")

Lo que resulta en:

1
www.wikihtp.com

Concatenar o agregar cadenas con el operador % {#concatenar o agregar cadenas con el operador}

Nuevamente, la concatenación no significa necesariamente que estamos agregando una cadena al final. Usando el operador %, podemos realizar una interpolación de cadenas. Al agregar % en una cadena como marcador, podemos reemplazar los marcadores con cadenas concretas más adelante:

1
2
3
string = "This %s is a %s string" % ("here", "random")

print(string)

Esto debería generar:

1
This here is a random string

De manera similar, puede usar otros marcadores para otros tipos de datos:

  • %d - para la representación de enteros:
1
2
string = "This is a string%d" % (1)
print(string) # Output: This is a string
  • %c - para la representación de caracteres:
1
2
string = "This string starts with a %c" % ('T')
print(string) # Output: This string starts with a T
  • %f - para número flotante:
1
2
string = "There is a %f percent chance that you'll learn string concatenation in Python after reading this article" % (99.99)
print(string) # Output filled 99,990000 in %f place

Nota: Si desea marcar explícitamente a cuántos dígitos se debe redondear el número (por ejemplo, 2), puede lograrlo con: %.2f.

Si desea leer más sobre cómo formatear cadenas en Python y las diferentes formas de hacerlo, lea nuestra [Guía para formatear cadenas en f-Strings de Python 3](/formateo-de-cadenas-con-python- 3s-fa-cuerdas/).

Concatenar cadenas con el método join()

El método join() toma un iterable como argumento y devuelve una cadena creada al unir los elementos de ese iterable. Vale la pena señalar que estos tienen que ser cadenas: cada elemento no se convierte inherentemente usando str(), a diferencia de nuestro propio método anterior.

Además, se usa un separador para definir el separador entre las cadenas unidas, y es la cadena base que llamamos join() en:

1
2
3
4
my_list = ["1", "2", "3", "4"] # List - iterable
string_from_list = "-".join(my_list) # The separator is "-"

print(string_from_list)

Esto debería generar:

1
1-2-3-4

En muchos casos, el separador es solo un espacio en blanco, por lo que normalmente verá:

1
" ".join(iterable)

Implementación de un método join() personalizado

Dado que el método integrado join() puede comportarse de forma un poco diferente de lo que podría haber esperado, implementemos nuestro propio método join() con un separador ajustable.

Querremos que también pueda manejar listas 2D, por lo que si una lista contiene otra lista dentro de sí misma - se aplana a una lista unidimensional, antes de unirse:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import itertools

def join(iterable, separator):
    # Empty string to hold result
    result = ""
    # Flatten 2D potentially 2D list into 1D
    iterable = list(itertools.chain(*iterable))
    # Concatenate strings with separator
    for string in iterable:
        result += str(string) + separator
    return result
    

string = join(['a', 'b', 'c'], ' ')
string2 = join(['a', ['b', 'c'], 'd'], ' ')

print(string)
print(string2)

Esto resulta en:

1
2
a b c 
a b c d 

Concatenar cadenas utilizando el espacio

Una forma sencilla de concatenar cadenas, generalmente solo cuando las está imprimiendo es aprovechar la barra espaciadora. Este enfoque se usa comúnmente solo para imprimir, ya que asignarlo a un objeto en la memoria es fácil, pero incómodo:

1
print("Concat" " strings" " using Space")

Si desea evitar el uso de espacios en blanco en las cadenas, puede agregar comas (,) entre cada elemento:

1
print("Concat", "strings", "using Space")

Ambos resultan en:

1
Concat strings using Space

Si desea asignarlos a una variable, puede hacerlo y se concatenarán automáticamente en una sola cadena:

1
2
3
string = "this " "is " "a " "big " "string"
print(type(string))
print(string)

Esto resulta en:

1
2
<class 'str'>
this is a big string

Incluso puedes hacer cadenas de varias líneas. Para lograr esto, agregamos un \ al final de cada línea para que Python sepa que hay más de una línea:

1
2
3
4
5
multi_line_string = "this " "string " \
                  "is coded in " "three lines " \
                  "but printed in one"
                  
print(multi_line_string)

Esto resulta en:

1
this string is coded in three lines but printed in one

Sin embargo, este enfoque es complicado e incómodo, y se prefieren otros.

Nota: No se puede lograr el mismo efecto con variables, solo cadenas literales:

1
2
3
4
string1 = "one string"
string2 = "two string"

final_string = string1 string2

Esto resulta en:

1
2
3
4
File "<string>", line 4
    final_string = string1 string2
                           ^
SyntaxError: invalid syntax

Conclusión

Unir/Agregar/Concatenar cadenas en Python es bastante simple y, como todo lo relacionado con Python, hay muchas formas de hacerlo. Todo se reduce a sus necesidades y preferencias.

En este breve tutorial, hemos echado un vistazo a algunas de las formas de concatenar cadenas

Licensed under CC BY-NC-SA 4.0