Sono abbastanza nuovo di Python e sono completamente confuso da .join()
che ho letto essere il metodo preferito per concatenare le stringhe.
Ho provato:
strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring().join(strid)
e ho ottenuto qualcosa come:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
Perché funziona così? Il 595
non dovrebbe essere aggiunto automaticamente?
Guardate attentamente la vostra uscita:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^ ^ ^
Ho evidenziato il "5", "9", "5" della tua stringa originale. Il metodo Python join()
è un metodo per le stringhe, e prende una lista di cose da unire alla stringa. Un esempio più semplice potrebbe aiutare a spiegare:
>>> ",".join(["a", "b", "c"])
'a,b,c'
La "," viene inserita tra ogni elemento della lista data. Nel vostro caso, la vostra "lista" è la rappresentazione della stringa "595", che viene trattata come la lista ["5", "9", "5"].
Sembra che tu stia invece cercando +
:
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
join
prende una cosa iterabile come argomento. Di solito è una lista. Il problema nel tuo caso è che una stringa è essa stessa iterabile, dando ogni carattere a turno. Il tuo codice si riduce a questo:
"wlfgALGbXOahekxSs".join("595")
che si comporta allo stesso modo di questo:
"wlfgALGbXOahekxSs".join(["5", "9", "5"])
e quindi produce la vostra stringa:
"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"
Le stringhe come iterables è uno dei problemi iniziali più confusi con Python.
join() è per concatenare tutti gli elementi della lista. 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