Concatenar item na lista para cadeias

575

Existe uma maneira mais simples de concatenar itens de string em uma lista em uma única string? Posso usar a str.join()função?

Por exemplo, esta é a entrada ['this','is','a','sentence']e esta é a saída desejadathis-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
fonte
24
'-'.join(sentence)
aland 17/09/12

Respostas:

1054

Use join:

>>> sentence = ['this','is','a','sentence']
>>> '-'.join(sentence)
'this-is-a-sentence'
Burhan Khalid
fonte
13
Não entendi, qual é o '-' à esquerda?
Lawrence DeSouza
5
@LawrenceDeSouza A string que você deseja unir; consulte a documentação ou esta resposta, que entra em detalhes um pouco mais.
Burhan Khalid
9
Eu meio que esperava sentence.join(" ")funcionar também, já que a operação reversa é list.split(" "). Alguma idéia se isso será adicionado aos métodos de lista do Python?
Wouter Thielen
10
@ Wouter, não vai. Por um lado, somente listas de strings podem ser unidas; então list.joinseria inadequado para uma lista arbitrária. Por outro lado, o argumento de str.joinpode ser qualquer sequência "iterável" de seqüências de caracteres, não apenas uma lista. A única coisa que faria sentido é uma função interna join(list, sep); existe um no stringmódulo (basicamente obsoleto) se você realmente quiser.
Alexis
4
@Leo' '.join(['this', 'is', 'a', 'sentence'])
Burhan Khalid
120

Uma maneira mais genérica de converter listas python em strings seria:

>>> 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 kid
fonte
3
por que a compreensão da lista é necessária quando a entrada é string? também map(str, my_lst)seria suficiente sem enumerar a lista =)
alvas
5
A maioria das respostas para esta pergunta está considerando o caso em que a lista contém seqüências de caracteres. O meu é uma maneira genérica de converter listas em strings. No meu exemplo, a lista é do tipo, intmas pode ser qualquer tipo que possa ser representado como uma sequência.
6pack garoto
3
Para adicionar isso, o mapa também seria útil quando usado com uma função lambda. Por exemplo ' '.join(map(lambda x: ' $'+ str(x), my_lst)), retornaria'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
ScottMcC
3
a adição de um mapa realmente ajuda com tipos de dados além da sequência. Ótimo!
Appleboy 28/02/19
40

É muito útil para iniciantes saber por que join é um método de string .

É muito estranho no começo, mas muito útil depois disso.

O resultado da junção é sempre uma string, mas o objeto a ser unido pode ser de vários tipos (geradores, lista, tuplas, etc.).

.joiné mais rápido porque aloca memória apenas uma vez. Melhor que a concatenação clássica (ver explicação detalhada ).

Depois de aprender, é muito confortável e você pode fazer truques como esse para adicionar parênteses.

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

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

Embora a resposta de @Burhan Khalid seja boa, acho que é mais compreensível assim:

from str import join

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

join(sentence, "-") 

O segundo argumento para join () é opcional e o padrão é "".

EDIT: Esta função foi removida no Python 3

SilentVoid
fonte
14
Esta função foi descontinuada na versão 2.xe será removida na versão 3.x. Sendo esse o caso, eu não recomendaria usá-lo sobre a outra resposta fornecida.
Matthew Green
@ Matthew Green, esta resposta e a resposta de Burhan Khalid usam a mesma função de maneiras diferentes, então sua resposta também foi preterida. Mas obrigado por apontar isso, veja como participar do 3.x. Mas se você estiver usando o 2.x, ele não desaparecerá.
SilentVoid
1
O dele não está obsoleto. Sua recomendação usa uma função de Lib / string.py que é totalmente diferente e descontinuada, enquanto a resposta @BurhanKhalid usa o método de string interno que não está descontinuado. Sua resposta é a mais correta agora e daqui para frente, enquanto isso só é bom por enquanto no 2.x.
Matthew Green
Tudo isso para dizer que, se você deseja promover essa alternativa, também deve incluir um aviso de que isso não é recomendado pelos motivos descritos nos meus comentários anteriores.
Matthew Green
2

Podemos especificar como temos que juntar a string. Em vez de '-', podemos usar ''

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

Também podemos usar a função de redução do 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
fonte
4
Complexidade desnecessária demais, por que não usar apenas 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
fonte
2
Embora esse snippet de código possa ser a solução, incluir uma explicação realmente ajuda a melhorar a qualidade da sua postagem. Lembre-se de que você está respondendo à pergunta dos leitores no futuro e essas pessoas podem não saber os motivos da sua sugestão de código.
alan.elkin