Concatenar elemento en la lista a cadenas

576

¿Hay una manera más simple de concatenar elementos de cadena en una lista en una sola cadena? ¿Puedo usar la str.join()función?

Por ejemplo, esta es la entrada ['this','is','a','sentence']y esta es la salida deseadathis-is-a-sentence

sentence = ['this','is','a','sentence']
sent_str = ""
for i in sentence:
    sent_str += str(i) + "-"
sent_str = sent_str[:-1]
print sent_str
alvas
fuente
24
'-'.join(sentence)
aland

Respuestas:

1054

Uso join:

>>> sentence = ['this','is','a','sentence']
>>> '-'.join(sentence)
'this-is-a-sentence'
Burhan Khalid
fuente
13
No entendí, ¿cuál es el '-' de la izquierda que se supone que es?
Lawrence DeSouza
55
@LawrenceDeSouza La cadena que desea unir; vea la documentación , o esta respuesta que entra en un poco más de detalle.
Burhan Khalid
99
Esperaba sentence.join(" ")que funcionara también, ya que la operación inversa es list.split(" "). ¿Alguna idea de si esto se va a agregar a los métodos de Python para listas?
Wouter Thielen
10
@Wouter, no lo hará. Por un lado, solo se pueden unir listas de cadenas; entonces list.joinsería inapropiado para una lista arbitraria. Por otro lado, el argumento de str.joinpuede 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 stringmódulo (básicamente obsoleto) si realmente lo quieres.
alexis
44
@Leo' '.join(['this', 'is', 'a', 'sentence'])
Burhan Khalid
120

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'
6pack niño
fuente
3
¿Por qué es necesaria la comprensión de la lista cuando la entrada es una cadena? también map(str, my_lst)sería suficiente sin enumerar la lista =)
alvas
55
La mayoría de las respuestas a esta pregunta están considerando el caso cuando la lista tiene cadenas. El mío es una forma genérica de convertir listas a cadenas. En mi ejemplo, la lista es de tipo, intpero podría ser cualquier tipo que se pueda representar como una cadena.
6pack kid
3
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'
ScottMcC
3
agregar un mapa realmente ayuda con los tipos de datos aparte de la cadena. ¡Excelente!
appleboy
40

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

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

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

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

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)'
Wallebot
fuente
12

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 para unirse () es opcional y el valor predeterminado es "".

EDITAR: esta función se eliminó en Python 3

SilentVoid
fuente
14
Esta función está en desuso en 2.xy se eliminará en 3.x. Siendo ese el caso, no recomendaría usar esto sobre la otra respuesta proporcionada.
Matthew Green
@Mathew Green esta respuesta y la respuesta de Burhan Khalid usan la misma función de diferentes maneras, por lo que su respuesta también está en desuso. Pero gracias por señalar eso, gota descubre cómo unirse a 3.x. Pero si estás usando 2.x, no va a desaparecer.
SilentVoid
1
Sin embargo, el suyo no está en desuso. Su recomendación usa una función de Lib / string.py que es completamente diferente y obsoleta, mientras que la respuesta @BurhanKhalid usa el método de cadena incorporado que no está en desuso. Su respuesta es la más correcta ahora y en el futuro, mientras que esto solo es bueno por ahora en 2.x.
Matthew Green
Todo eso para decir que si desea promover esta alternativa, también debe incluir una advertencia de que esto no se recomienda por los motivos descritos en mis comentarios anteriores.
Matthew Green
2

Podemos especificar cómo debemos unir la cadena. En lugar de '-', podemos usar ''

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

También podemos usar la función de reducción de Python :

from functools import reduce

sentence = ['this','is','a','sentence']
out_str = str(reduce(lambda x,y: x+"-"+y, sentence))
print(out_str)
Nishkarsh Dixit
fuente
44
Demasiada complejidad innecesaria, ¿por qué no solo usar join?
Sebastian Palma
-1
def eggs(someParameter):
    del spam[3]
    someParameter.insert(3, ' and cats.')


spam = ['apples', 'bananas', 'tofu', 'cats']
eggs(spam)
spam =(','.join(spam))
print(spam)
Pyte
fuente
2
Si bien este fragmento de código puede ser la solución, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo la pregunta para los lectores en el futuro, y que esas personas podrían no conocer los motivos de su sugerencia de código.
alan.elkin