Concatena l'elemento nell'elenco nelle stringhe


576

Esiste un modo più semplice per concatenare gli elementi stringa in un elenco in una singola stringa? Posso usare la str.join()funzione?

Ad esempio, questo è l'input ['this','is','a','sentence']e questo è l'output desideratothis-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

24
'-'.join(sentence)
aland,

Risposte:


1054

Utilizzare join:

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

13
Non ho capito, qual è il '-' sulla sinistra dovrebbe essere ??
Lawrence DeSouza,

5
@LawrenceDeSouza La stringa che vuoi unire; vedere la documentazione o questa risposta che fornisce ulteriori dettagli.
Burhan Khalid,

9
Mi aspettavo sentence.join(" ")di funzionare anche io , dato che l'operazione inversa è list.split(" "). Qualche idea se questo verrà aggiunto ai metodi di Python per le liste?
Wouter Thielen,

10
@Wouter, non lo farà. Da un lato, è possibile unire solo elenchi di stringhe; quindi list.joinsarebbe inappropriato per un elenco arbitrario. Dall'altro, l'argomento di str.joinpuò essere qualsiasi sequenza di stringhe "iterabile", non solo un elenco. L'unica cosa che avrebbe senso è una funzione integrata join(list, sep); ce n'è uno nel stringmodulo (sostanzialmente obsoleto) se lo vuoi davvero.
alexis,

4
@Leo' '.join(['this', 'is', 'a', 'sentence'])
Burhan Khalid

120

Un modo più generico per convertire gli elenchi di Python in stringhe sarebbe:

>>> 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'

3
perché è necessaria la comprensione dell'elenco quando l'input è una stringa? inoltre map(str, my_lst)sarebbe sufficiente senza elencare la lista =)
alvas

5
La maggior parte delle risposte a questa domanda sta prendendo in considerazione il caso in cui l'elenco contiene stringhe. Il mio è un modo generico per convertire elenchi in stringhe. Nel mio esempio, l'elenco è di tipo intma potrebbe essere qualsiasi tipo che può essere rappresentato come una stringa.
6pacco bambino

3
Per aggiungere a ciò, la mappa sarebbe utile anche se usata con una funzione lambda. Ad esempio ' '.join(map(lambda x: ' $'+ str(x), my_lst))sarebbe tornato'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
ScottMcC il

3
l'aggiunta di una mappa aiuta in realtà con tipi di dati diversi dalla stringa. Grande!
appleboy,

40

È molto utile per i principianti sapere perché join è un metodo stringa .

È molto strano all'inizio, ma molto utile dopo questo.

Il risultato di join è sempre una stringa, ma l'oggetto da unire può essere di molti tipi (generatori, elenco, tuple, ecc.).

.joinè più veloce perché alloca memoria una sola volta. Meglio della concatenazione classica (vedi spiegazione estesa ).

Una volta appreso, è molto comodo e puoi fare trucchi come questo per aggiungere parentesi.

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

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

12

Sebbene la risposta di @Burhan Khalid sia buona, penso che sia più comprensibile in questo modo:

from str import join

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

join(sentence, "-") 

Il secondo argomento di join () è facoltativo e il valore predefinito è "".

EDIT: questa funzione è stata rimossa in Python 3


14
Questa funzione è obsoleta in 2.x e verrà rimossa in 3.x. Stando così le cose, non consiglierei di usarlo sull'altra risposta fornita.
Matthew Green,

@Mathew Green questa risposta e la risposta di Burhan Khalid usano la stessa funzione in modi diversi, quindi anche la sua risposta è deprecata. Ma grazie per averlo sottolineato, Gota ha capito come partecipare a 3.x. Ma se stai usando 2.x, non sta andando via.
SilentVoid,

1
Il suo non è deprecato però. Il tuo consiglio usa una funzione di Lib / string.py che è completamente diversa e deprecata mentre la risposta @BurhanKhalid usa il metodo di stringa incorporato che non è deprecato. La sua risposta è la più corretta adesso e va avanti, mentre per ora è valida solo per 2.x.
Matthew Green,

Tutto ciò per dire che se vuoi promuovere questa alternativa dovresti anche includere un avvertimento che questo non è raccomandato per i motivi indicati nei miei commenti precedenti.
Matthew Green,

2

Possiamo specificare come dobbiamo unire la stringa. Invece di '-', possiamo usare ''

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

2

Possiamo anche usare la funzione di riduzione di Python :

from functools import reduce

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

4
Troppa complessità non necessaria, perché non utilizzarla 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)

2
Sebbene questo frammento di codice possa essere la soluzione, includere una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e che queste persone potrebbero non conoscere i motivi del tuo suggerimento sul codice.
alan.elkin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.