Cosa fa esattamente il metodo .join ()?


209

Sono abbastanza nuovo in Python e sono completamente confuso dal .join()quale ho letto il metodo preferito per concatenare le stringhe.

Provai:

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring().join(strid)

e ottenuto qualcosa del tipo:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5

Perché funziona così? Il 595giusto non dovrebbe essere automaticamente aggiunto?


1
Penso che tu abbia toccato il tuo Yubikey mentre il programma era in esecuzione
Trenton il

Risposte:


303

Guarda attentamente il tuo output:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^

Ho evidenziato "5", "9", "5" della stringa originale. Il join()metodo Python è un metodo stringa e accetta un elenco di cose da unire alla stringa. Un esempio più semplice potrebbe aiutare a spiegare:

>>> ",".join(["a", "b", "c"])
'a,b,c'

"," Viene inserito tra ciascun elemento dell'elenco specificato. Nel tuo caso, la tua "lista" è la rappresentazione di stringa "595", che viene trattata come la lista ["5", "9", "5"].

Sembra che tu stia cercando +invece:

print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid

1
Perché non lo è: 5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5wlfgALGbXOahekxSs? Con la stringa aggiunta all'ultimo elemento?
Matt McCormick,

10
Uno dei motivi è che ciò dà joinl'utile proprietà di essere l'inverso di split( docs.python.org/library/stdtypes.html#str.split )
cobbal

4
Se si desidera un altro delimitatore, inserire una stringa vuota alla fine dell'elenco. ','.join(['a', 'b', 'c', ''])dà "a, b, c,"
tgray il

9
OP era probabilmente confuso string.joincon il os.path.joinquale effettivamente concatena i percorsi
Juan Campa,

91

joinprende una cosa iterabile come argomento. Di solito è un elenco. Il problema nel tuo caso è che una stringa è di per sé iterabile, dando a turno ogni carattere. Il tuo codice si suddivide in questo:

"wlfgALGbXOahekxSs".join("595")

che agisce allo stesso modo di questo:

"wlfgALGbXOahekxSs".join(["5", "9", "5"])

e così produce la tua stringa:

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"

Stringhe come iterabili è uno dei problemi iniziali più confusi con Python.


8
voto positivo per sottolineare quale potrebbe essere il nocciolo della confusione: le stringhe sono iterabili e si comportano come liste di caratteri.
Daniel Baird,

59

Per aggiungere una stringa, basta concatenarla con il +segno.

Per esempio

>>> a = "Hello, "
>>> b = "world"
>>> str = a + b
>>> print str
Hello, world

joincollega le stringhe con un separatore. Il separatore è quello che metti proprio prima di join. Per esempio

>>> "-".join([a,b])
'Hello, -world'

Join prende un elenco di stringhe come parametro.


5
Questo tipo di risposta diretta e concisa dovrebbe essere sostenuto dalla nostra comunità. @Dan
DehengYe

7

join () serve per concatenare tutti gli elementi dell'elenco. Per concatenare solo due stringhe "+" avrebbe più senso:

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring() + strid

4

Per espandere un po 'di più su ciò che dicono gli altri, se si desidera utilizzare join per concatenare semplicemente le due stringhe, è necessario:

strid = repr(595)
print ''.join([array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring(), strid])

2

C'è una buona spiegazione del perché è costoso usarlo +per concatenare un gran numero di stringhe qui

L'operatore Plus è la soluzione perfetta per concatenare due stringhe Python. Ma se continui ad aggiungere più di due stringhe (n> 25), potresti voler pensare a qualcos'altro.

''.join([a, b, c]) il trucco è un'ottimizzazione delle prestazioni.


0

Fornendo questo come input,

li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
s = ";".join(li)
print(s)

Python lo restituisce come output:

'server=mpilgrim;uid=sa;database=master;pwd=secret'

0
list = ["my", "name", "is", "kourosh"]   
" ".join(list)

Se si tratta di un input, utilizzando il metodo JOIN, possiamo aggiungere la distanza tra le parole e anche convertire l'elenco nella stringa.

Questo è l'output di Python

'my name is kourosh'

0

"" .join può essere utilizzato per copiare la stringa in un elenco in una variabile

>>> myList = list("Hello World")
>>> myString = "".join(myList)
>>> print(myList)
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> print(myString)
Hello World
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.