Der beste Weg, eine Zeichenfolge an eine Zeichenfolgenvariable anzuhängen, ist die Verwendung von +
oder +=
. Dies liegt daran, dass es lesbar und schnell ist. Sie sind auch genauso schnell, welche Sie wählen, ist Geschmackssache, die letztere ist die häufigste. Hier sind Timings mit dem timeit
Modul:
a = a + b:
0.11338996887207031
a += b:
0.11040496826171875
Diejenigen, die empfehlen, Listen zu haben und an diese anzuhängen und diese dann zu verbinden, tun dies jedoch, da das Anhängen einer Zeichenfolge an eine Liste im Vergleich zum Erweitern einer Zeichenfolge vermutlich sehr schnell ist. Und dies kann in einigen Fällen zutreffen. Hier ist zum Beispiel eine Million Anhänge einer Zeichenfolge mit einem Zeichen, zuerst an eine Zeichenfolge, dann an eine Liste:
a += b:
0.10780501365661621
a.append(b):
0.1123361587524414
OK, es stellt sich heraus, dass das Anhängen auch dann noch schneller war, wenn die resultierende Zeichenfolge eine Million Zeichen lang ist.
Versuchen wir nun, eine tausend Zeichen lange Zeichenfolge hunderttausend Mal anzuhängen:
a += b:
0.41823482513427734
a.append(b):
0.010656118392944336
Die Endzeichenfolge ist daher ungefähr 100 MB lang. Das war ziemlich langsam, das Anhängen an eine Liste war viel schneller. Dass dieses Timing nicht das Finale beinhaltet a.join()
. Wie lange würde das dauern?
a.join(a):
0.43739795684814453
Oups. Auch in diesem Fall ist das Anhängen / Verbinden langsamer.
Woher kommt diese Empfehlung? Python 2?
a += b:
0.165287017822
a.append(b):
0.0132720470428
a.join(a):
0.114929914474
Nun, append / join ist geringfügig es schneller , wenn Sie extrem lange Strings verwenden (was Sie sind in der Regel nicht, was würden Sie eine Zeichenfolge, die 100 MB im Speicher ist?)
Aber der wahre Drahtreifen ist Python 2.3. Wo ich dir nicht einmal die Timings zeigen werde, weil es so langsam ist, dass es noch nicht fertig ist. Diese Tests dauern plötzlich Minuten . Mit Ausnahme des Anhängens / Verbindens, das genauso schnell ist wie unter späteren Pythons.
Jep. Die Verkettung von Strings war in Python in der Steinzeit sehr langsam. Unter 2.4 ist dies jedoch nicht mehr der Fall (oder zumindest Python 2.4.7). Daher wurde die Empfehlung zur Verwendung von Anhängen / Verknüpfen 2008 veraltet, als Python 2.3 nicht mehr aktualisiert wurde und Sie es nicht mehr verwenden sollten. :-)
(Update: Es stellte sich heraus, dass ich die Tests sorgfältiger durchgeführt habe als die Verwendung von +
und +=
schneller für zwei Zeichenfolgen in Python 2.3. Die Empfehlung zur Verwendung ''.join()
muss ein Missverständnis sein.)
Dies ist jedoch CPython. Andere Implementierungen können andere Bedenken haben. Und dies ist nur ein weiterer Grund, warum vorzeitige Optimierung die Wurzel allen Übels ist. Verwenden Sie keine Technik, die "schneller" sein soll, es sei denn, Sie messen sie zuerst.
Daher ist die "beste" Version für die Verkettung von Zeichenfolgen die Verwendung von + oder + = . Und wenn sich herausstellt, dass das für Sie langsam ist, was ziemlich unwahrscheinlich ist, dann tun Sie etwas anderes.
Warum verwende ich in meinem Code viel Anhängen / Verbinden? Weil es manchmal tatsächlich klarer ist. Besonders wenn alles, was Sie miteinander verketten sollten, durch Leerzeichen, Kommas oder Zeilenumbrüche getrennt werden sollte.