Jeg er ganske ny i Python og er helt forvirret av .join()
som jeg har lest er den foretrukne metoden for å sammenkoble strenger.
Jeg har prøvd:
strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring().join(strid)
og fikk noe sånt som:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
Hvorfor fungerer det slik? Burde ikke 595
bare legges til automatisk?
Se nøye på resultatene dine:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^ ^ ^
Jeg har uthevet "5", "9", "5" av den opprinnelige strengen din. Python-metoden join()
er en strengmetode, og tar en liste med ting som skal sammenføyes med strengen. Et enklere eksempel kan bidra til å forklare:
>>> ",".join(["a", "b", "c"])
'a,b,c'
"," settes inn mellom hvert element i den gitte listen. I ditt tilfelle er "listen" strengrepresentasjonen "595", som behandles som listen ["5", "9", "5"].
Det ser ut til at du leter etter +
i stedet:
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
join
tar en itererbar ting som et argument. Vanligvis er det en liste. Problemet i ditt tilfelle er at en streng i seg selv er itererbar, og gir ut hvert tegn etter tur. Koden din brytes ned til dette:
"wlfgALGbXOahekxSs".join("595")
som fungerer på samme måte som dette:
"wlfgALGbXOahekxSs".join(["5", "9", "5"])
og produserer dermed strengen din:
"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"
Strenger som iterables er en av de mest forvirrende begynnelsesproblemene med Python.
join() er for sammenkjeding av alle listeelementer. For sammenkjeding av bare to strenger "+" ville være mer fornuftig:
strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid