I'm ziemlich neu in Python und bin völlig verwirrt von .join()
, die ich gelesen habe, ist die bevorzugte Methode für die Verkettung von Zeichenfolgen.
Ich habe es versucht:
strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring().join(strid)
und bekam etwas wie:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
Warum funktioniert das so? Sollte das "595" nicht einfach automatisch angehängt werden?
Schauen Sie sich Ihren Output genau an:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^ ^ ^
Ich habe die Zeichen "5", "9", "5" Ihres ursprünglichen Strings hervorgehoben. Die Python-Methode join()
ist eine String-Methode und nimmt eine Liste von Dingen, die mit dem String verbunden werden sollen. Ein einfacheres Beispiel könnte zur Erklärung beitragen:
>>> ",".join(["a", "b", "c"])
'a,b,c'
Das "," wird zwischen jedes Element der angegebenen Liste eingefügt. In Ihrem Fall ist Ihre "Liste" die String-Repräsentation "595", die als Liste ["5", "9", "5"] behandelt wird.
Es scheint, dass Sie stattdessen nach "+" suchen:
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
join
nimmt ein iterierbares Ding als Argument. Normalerweise ist es eine Liste. Das Problem in Ihrem Fall ist, dass eine Zeichenkette selbst iterierbar ist und jedes Zeichen der Reihe nach ausgibt. Ihr Code sieht folgendermaßen aus:
"wlfgALGbXOahekxSs".join("595")
was sich genauso verhält wie das hier:
"wlfgALGbXOahekxSs".join(["5", "9", "5"])
und erzeugt so Ihre Zeichenkette:
"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"
Strings als Iterables sind eines der verwirrendsten Anfangsprobleme mit Python.
join() ist für die Verkettung aller Listenelemente gedacht. Für die Verkettung von nur zwei Zeichenfolgen wäre "+" sinnvoller:
strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid