Cómo concatenar (unir) elementos en una lista en una sola cadena

5 minutos de lectura

avatar de usuario de alvas
alvas

¿Cómo concateno una lista de cadenas en una sola cadena?

Por ejemplo, dado ['this', 'is', 'a', 'sentence']como lo consigo "this-is-a-sentence"?


Para manejar algunas cuerdas en variables separadasconsulte ¿Cómo agrego una cadena a otra en Python?.

Para el proceso opuesto, crear una lista a partir de una cadena, consulte ¿Cómo divido una cadena en una lista de caracteres? o ¿Cómo divido una cadena en una lista de palabras? según sea apropiado.

Avatar de usuario de Burhan Khalid
burhan khalid

Usar str.join:

>>> words = ['this', 'is', 'a', 'sentence']
>>> '-'.join(words)
'this-is-a-sentence'
>>> ' '.join(words)
'this is a sentence'

  • No entendí, ¿qué se supone que es el ‘-‘ de la izquierda?

    –Lawrence De Souza

    02/04/2014 a las 23:46

  • @LawrenceDeSouza La cadena a la que desea unirse; ver el documentacióno esta respuesta que entra en un poco más de detalle.

    – Burhan Jalid

    6 de abril de 2014 a las 6:53


  • yo esperaba sentence.join(" ") para trabajar también, ya que la operación inversa es list.split(" "). ¿Alguna idea de si esto se agregará a los métodos de Python para listas?

    – Wouter Thielen

    23 de agosto de 2015 a las 10:02

  • @Wouter, no lo hará. Por un lado, solo se pueden unir listas de cadenas; asi que list.join sería inapropiado para una lista arbitraria. Por otro lado, el argumento de str.join puede ser cualquier secuencia “iterable” de cadenas, no solo una lista. Lo único que tendría sentido es una función incorporada join(list, sep); hay uno en el (básicamente obsoleto) string módulo si realmente lo quieres.

    – alexis

    7 sep 2015 a las 22:28


  • @alexis Eso sí tiene sentido, que una lista de Python pueda contener elementos de tipos mixtos y que no siempre se pueda unir. ¡Gracias!

    – Wouter Thielen

    12 de septiembre de 2015 a las 7:09

Avatar de usuario de Aaron S
aarón s

Una forma más genérica de convertir listas de Python en cadenas sería:

>>> my_lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> my_lst_str="".join(map(str, my_lst))
>>> print(my_lst_str)
12345678910

  • ¿Por qué es necesaria la comprensión de la lista cuando la entrada es una cadena? además map(str, my_lst) seria suficiente sin enumerar la lista =)

    – alvas

    1 de diciembre de 2015 a las 8:58

  • La mayoría de las respuestas a esta pregunta están considerando el caso cuando la lista tiene cadenas. La mía es una forma genérica de convertir listas en cadenas. En mi ejemplo, la lista es de tipo int pero podría ser cualquier tipo que pueda representarse como una cadena.

    – Aarón S.

    2 de diciembre de 2015 a las 1:02


  • Para agregar a esto, el mapa también sería útil cuando se usa con una función lambda. Por ejemplo ' '.join(map(lambda x: ' $'+ str(x), my_lst)) volvería '$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'

    – Scott McC

    22 de junio de 2017 a las 3:17


  • agregar un mapa en realidad ayuda con los tipos de datos además de la cadena. ¡Excelente!

    – chico manzana

    28 de febrero de 2019 a las 7:55

Avatar de usuario de Wallebot
Wallebot

Es muy útil para los principiantes saber por qué join es un método de cadena.

Es muy extraño al principio, pero muy útil después de esto.

El resultado de join es siempre una cadena, pero el objeto a unir puede ser de muchos tipos (generadores, lista, tuplas, etc).

.join es más rápido porque asigna memoria solo una vez. Mejor que la concatenación clásica (ver, explicación extendida).

Una vez que lo aprendes, es muy cómodo y puedes hacer trucos como este para agregar paréntesis.

>>> ",".join("12345").join(("(",")"))
Out:
'(1,2,3,4,5)'

>>> list = ["(",")"]
>>> ",".join("12345").join(list)
Out:
'(1,2,3,4,5)'

  • alguien puede explicar cual es el segundo join() es decir join(("(",")")) ¿lo hace? es como magia

    – cyanbhu

    12 de noviembre de 2020 a las 7:17

  • ("(",")") es una tupla de dos cadenas – el paréntesis abierto "(" y el paréntesis de cierre ")". Entonces el segundo join() une esas dos cadenas usando la salida de la primera join() como el separador (es decir, '1,2,3,4,5').

    – zepman

    18 de febrero de 2021 a las 16:47


  • ¿Es esto correcto? “El resultado de unir siempre es una cadena, pero el objeto a unir puede ser de muchos tipos (generadores, lista, tuplas, etc.)”. La respuesta de Aaron S sugiere que esto no es cierto, debe usar map(str, ) si hay otros tipos en la lista.

    – O´Rooney

    28 de marzo a las 21:42

  • @O’Rooney la respuesta es decir que puedes .join listas, tuplas o generadores, que son diferentes tipos de colección, pero solo deben contener cadenas.

    – Boris Verjovskiy

    16 ago a las 18:12

Avatar de usuario de SilentVoid
SilencioVacío

Editar desde el futuro: Por favor, no utilice la respuesta a continuación. Esta función se eliminó en Python 3 y Python 2 está muerto. Incluso si todavía está usando Python 2, debe escribir código listo para Python 3 para facilitar la inevitable actualización.


Aunque la respuesta de @Burhan Khalid es buena, creo que es más comprensible así:

from str import join

sentence = ['this','is','a','sentence']

join(sentence, "-") 

El segundo argumento de join() es opcional y por defecto es ” “.

avatar de usuario de mounirboulwafa
mounirboulwafa

list_abc = ['aaa', 'bbb', 'ccc']

string = ''.join(list_abc)
print(string)
>>> aaabbbccc

string = ','.join(list_abc)
print(string)
>>> aaa,bbb,ccc

string = '-'.join(list_abc)
print(string)
>>> aaa-bbb-ccc

string = '\n'.join(list_abc)
print(string)
>>> aaa
>>> bbb
>>> ccc

el avatar de usuario del hombre de hojalata
el hombre de hojalata

También podemos usar Python reduce función:

from functools import reduce

sentence = ['this','is','a','sentence']
out_str = str(reduce(lambda x,y: x+"-"+y, sentence))
print(out_str)

el avatar de usuario del hombre de hojalata
el hombre de hojalata

Podemos especificar cómo unimos la cadena. En vez de '-'nosotros podemos usar ' ':

sentence = ['this','is','a','sentence']
s=(" ".join(sentence))
print(s)

¿Ha sido útil esta solución?