Wie kann ich mit append einen string an einen anderen in Python?
Will ich eine effiziente Methode zum Anhängen eines Strings an einen anderen in Python.
var1 = "foo"
var2 = "bar"
var3 = var1 + var2
Gibt es eine gute integrierte Methode zu verwenden?
TL;DR: Wenn Sie gerade auf der Suche nach der einfache Weg, um strings Anhängen, und Sie kümmern sich nicht um Effizienz:
"foo" + "bar" + str(3)
InformationsquelleAutor user469652 | 2010-12-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nur einen Verweis auf eine Zeichenfolge, und Sie verketten eine andere Zeichenfolge bis zum Ende, CPython jetzt spezielle Fälle, und versucht verlängern Sie die Zeichenfolge im Ort.
Das Endergebnis ist, dass der Betrieb amortisiert O(n).
z.B.
verwendet werden, um O(n^2), aber jetzt ist es O(n).
Aus der Quelle (bytesobject.c):
Ist es einfach genug, um zu überprüfen, empirisch.
Es wichtig jedoch zu beachten, dass diese Optimierung nicht Teil der Python-spec. Es ist nur in der cPython-Implementierung, soweit ich weiß. Die gleichen empirischen Tests auf pypy oder jython zum Beispiel zeigen vielleicht die älteren O(n**2) Leistung .
So weit so gut, aber dann,
ouch noch schlimmer als die quadratische. So pypy ist etwas zu tun, das funktioniert gut mit kurzen Zeichenfolgen, aber schlecht für größere Zeichenfolgen.
Nein. Es ist mindestens in 2,6 vielleicht sogar 2.5
Sie haben zitiert, die
PyString_ConcatAndDel
Funktion, sondern enthalten den Kommentar für_PyString_Resize
. Auch der Kommentar nicht wirklich etablieren Sie Ihre Behauptung in Bezug auf die Big-OHaben Sie vielleicht aufgehört, Ihre CPython-experiment eine iteration zu früh. Ich mache ungefähr Faktor Zeit von 10 bis 1000000, aber dann von 1000000 bis 10000000, dass es plötzlich nimmt 100 - mal so lang. Vielleicht ist es nur optimiert nur bis einer bestimmten Größe? Ich bin mit 2.7.11 Python auf Windows 10 64 bit.
herzlichen Glückwunsch auf die Ausnutzung einer CPython-Funktion, die den code durchforsten, die auf anderen Implementierungen. Schlecht beraten.
InformationsquelleAutor John La Rooy
Nicht vorzeitig optimieren. Wenn Sie keinen Grund haben, zu glauben, es ist eine Geschwindigkeit Engpass verursacht durch die string-Verkettungen dann nur stick mit
+
und+=
:Sagte, dass, wenn Ihr Ziel ist so etwas wie der Java-StringBuilder, der kanonische Python-idiom ist, um zu einer Liste Elemente hinzufügen und verwenden Sie dann
str.join
zu verketten alle am Ende:Mit .join ist mehr effizient. Der Grund dafür ist, dass Python strings sind unveränderlich, also immer wieder mit s += mehr zuteilen wird viele sukzessive größeren strings. .- join-Generierung der Letzte string in einem Rutsch aus seinen Bestandteilen.
es wurde eine signifikante Verbesserung in diesem Bereich - siehe meine Antwort
InformationsquelleAutor John Kugelman
Nicht.
Ist, für die meisten Fällen werden Sie besser dran, die Generierung der ganze string in einem Rutsch eher dann anfügen an einen bestehenden string.
Beispielsweise nicht tun:
obj1.name + ":" + str(obj1.count)
Statt: verwenden Sie
"%s:%d" % (obj1.name, obj1.count)
Die leichter zu Lesen und mehr effizient.
string + string ist ziemlich einfach zu Folgen. Aber
"<div class='" + className + "' id='" + generateUniqueId() + "'>" + message_text + "</div>"
finde ich weniger lesbar und fehleranfällig ist, dann"<div class='{classname}' id='{id}'>{message_text}</div>".format(classname=class_name, message_text=message_text, id=generateUniqueId())
Dieser überhaupt nicht helfen, wenn das, was ich versuche zu tun, ist die grobe Entsprechung von, sagen wir, PHP/perl "string .= verifydata()" oder ähnlich.
Und in diesem Fall ist die Antwort auf diese Frage ist "Nein, denn dieser Ansatz deckt nicht das meine"
Die vorgeschlagene Lösung ist definitiv nicht einfacher zu Lesen.
InformationsquelleAutor Winston Ewert
Verbindet str1 und str2 mit einem Leerzeichen als Trennzeichen. Sie können auch
"".join(str1, str2, ...)
.str.join()
nimmt ein durchsuchbar, so dass Sie würde haben, um die strings in einer Liste oder einem Tupel.Das ist ungefähr so effizient, wie es wird für eine vordefinierte Methode.
InformationsquelleAutor Rafe Kettler
Wenn Sie brauchen, um zu tun, viele append-Operationen zu bauen ist eine große Zeichenfolge, die Sie verwenden können, StringIO oder cStringIO. Die Schnittstelle wird wie eine Datei. dh: Sie
write
um text anzufügen.Wenn Sie nur anfügen von zwei Saiten, dann verwenden Sie einfach
+
.InformationsquelleAutor Laurence Gonsalves
es hängt wirklich von Ihrer Anwendung. Wenn Sie die Schleife durch Hunderte von Wörtern und wollen, fügen Sie diese alle in eine Liste
.join()
ist besser. Aber, wenn Sie setzen zusammen einen langen Satz, du bist besser dran mit+=
.InformationsquelleAutor Ramy
Python 3.6 gibt uns f-Saiten, die sind ein Genuss:
Können Sie die meisten alles, was im inneren die geschweiften Klammern
InformationsquelleAutor Trenton
Mit
a.__add__(b)
ist identisch zu schreibena+b
. Beim verketten von strings mit der+
Betreiber, Python aufrufen, die__add__
- Methode auf den string auf der linken Seite vorbei an der rechten Seite-string als parameter.InformationsquelleAutor Rahul Shrivastava
Im Grunde keinen Unterschied. Die einzige konsistente trend ist, dass Python scheint immer langsamer wird mit jeder version... 🙁
Liste
Python 2.7
Python 3.4
Python 3.5
Python 3.6
String
Python 2.7:
Python 3.4
Python 3.5
Python 3.6
1.19 s
und992 ms
bzw. auf Python2.7Yep, du hast Recht. Ich bearbeitete die Antwort.
InformationsquelleAutor ostrokach
anfügen von strings mit __add__ Funktion
Ausgabe
str + str2
ist noch kürzer.InformationsquelleAutor saigopi