Ich bin ziemlich neu in Python und bin völlig verwirrt von .join()
. Ich habe gelesen, dass dies die bevorzugte Methode zum Verketten von Strings ist.
Ich habe es versucht:
strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring().join(strid)
und habe so etwas wie:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
Warum funktioniert das so? Sollte der 595
nicht einfach automatisch angehängt werden?
Sehen Sie sich Ihre Ausgabe genau an:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^ ^ ^
Ich habe die "5", "9", "5" Ihrer Originalzeichenfolge hervorgehoben. Die Python join()
-Methode ist eine Zeichenkettenmethode und benötigt eine list -Domäne, um sie mit der Zeichenfolge zu verbinden. Ein einfacheres Beispiel könnte zur Erklärung beitragen:
>>> ",".join(["a", "b", "c"])
'a,b,c'
Das "," wird zwischen jedem Element der angegebenen Liste eingefügt. In Ihrem Fall ist Ihre "Liste" die Zeichenfolgendarstellung "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 eine iterable Sache als Argument. Normalerweise ist es eine Liste. Das Problem in Ihrem Fall ist, dass ein String selbst iterierbar ist und jedes Zeichen der Reihe nach ausgibt. Ihr Code lässt sich so zusammenfassen:
"wlfgALGbXOahekxSs".join("595")
das wirkt wie folgt:
"wlfgALGbXOahekxSs".join(["5", "9", "5"])
und so produziert Ihre Zeichenfolge:
"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"
Strings as iterables ist eines der verwirrendsten Probleme mit Python.
Um eine Zeichenfolge anzufügen, verketten Sie sie einfach mit dem Zeichen +
.
Z.B.
>>> a = "Hello, "
>>> b = "world"
>>> str = a + b
>>> print str
Hello, world
join
verbindet Strings mit einem Trennzeichen. Das Trennzeichen ist das, was Sie direkt vor der join
platzieren. Z.B.
>>> "-".join([a,b])
'Hello, -world'
Join nimmt eine Liste von Strings als Parameter.
join () dient zum Verketten aller Listenelemente. Für die Verkettung von nur zwei Zeichenketten wäre "+" sinnvoller:
strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
Um ein wenig auf das hinzuweisen, was andere sagen, wenn Sie join verwenden möchten, um Ihre zwei Zeichenfolgen einfach zu verketten, würden Sie Folgendes tun:
strid = repr(595)
print ''.join([array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring(), strid])
Es gibt eine gute Erklärung dafür, warum die Verwendung von +
für die Verkettung einer großen Anzahl von Zeichenfolgen hier teuer ist.
Plus Operator ist eine perfekte Lösung, um two Python .__ zu verketten. Streicher Wenn Sie jedoch mehr als zwei Zeichenfolgen hinzufügen (n> 25), können Sie Vielleicht möchten Sie etwas anderes denken.
''.join([a, b, c])
trick ist eine Leistungsoptimierung.
"" .join kann verwendet werden, um die Zeichenfolge in einer Liste in eine Variable zu kopieren
>>> myList = list("Hello World")
>>> myString = "".join(myList)
>>> print(myList)
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> print(myString)
Hello World
list = ["my", "name", "is", "kourosh"]
" ".join(list)
Wenn dies eine Eingabe ist, können wir mit der JOIN-Methode den Abstand zwischen den Wörtern hinzufügen und die Liste auch in die Zeichenfolge konvertieren.
Dies ist eine Python-Ausgabe
'my name is kourosh'
Bei der Bereitstellung als Eingabe,
li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
s = ";".join(li)
print(s)
Python gibt dies als Ausgabe zurück:
'server=mpilgrim;uid=sa;database=master;pwd=secret'