wake-up-neo.net

Was genau macht die .join () -Methode?

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?

185
Matt McCormick

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
281
Greg Hewgill

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.

87
Ned Batchelder

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.

53
Dan Loewenherz

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
7
Pēteris Caune

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])
4
Jorenko

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.

1
ZakS

"" .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
0
Martin
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'
0
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'
0
Akash Kandpal