Frage: Wie kann ich in Python effizient einen String an einen anderen anhängen? Gibt es eine schnellere Alternative zum folgenden Code?
<code class="python">var1 = "foo" var2 = "bar" var3 = var1 + var2</code>
Antwort:
CPython, die Hauptimplementierung von Python, optimiert jetzt die Zeichenfolgenverkettung, indem versucht wird, die Zeichenfolge zu erweitern vorhanden, wenn nur ein Verweis auf eine Zeichenfolge vorhanden ist. Diese Optimierung führt zu einer amortisierten O(n)-Zeitkomplexität.
Zum Beispiel ist der folgende Code:
<code class="python">s = "" for i in range(n): s += str(i)</code>
der früher eine Zeitkomplexität von O(n^2) hatte jetzt O(n).
Technische Details:
In der CPython-Implementierung ist die Funktion _PyBytes_Resize für diese Optimierung verantwortlich. Es ermöglicht die Größenänderung von Zeichenfolgen, ohne ein neues Objekt zu erstellen, vorausgesetzt, dass nur ein Modul auf die ursprüngliche Zeichenfolge verweist.
Leistungsanalyse:
Empirische Tests belegen die erhebliche Leistungsverbesserung für String-Verkettungsoperationen:
String Size | Concatenation Time (CPython) |
---|---|
10 | 1.85 usec |
100 | 16.8 usec |
1,000 | 158 usec |
10,000 | 1.71 msec |
100,000 | 14.6 msec |
1,000,000 | 173 msec |
Wichtiger Hinweis:
Diese Optimierung ist spezifisch für CPython und möglicherweise nicht in anderen Python-Implementierungen wie PyPy oder Jython vorhanden . In diesen Fällen kann die Leistung der Zeichenfolgenverkettung von der CPython-Implementierung abweichen.
Das obige ist der detaillierte Inhalt vonString-Verkettung in Python: Gibt es eine schnellere Möglichkeit, Strings anzuhängen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!