[Python-de] strings zusammensetzen.

Hermann Riemann nospam.ng at hermann-riemann.de
Sa Sep 16 10:19:04 EDT 2017


Am 16.09.2017 um 09:28 schrieb Peter J. Holzer:

 > Wenn Du die bereits in einer Liste vorliegen hast, ist "".join(liste)
 > natürlich ideal.

 > Aber wenn Du die Liste erst bauen musst, ist

 >      liste = []
 >      for ...:
 >          element = ...
 >          liste.append(element)
 >      s = "".join(liste)

 > sicher nicht besser als

 >      s = ""
 >      for ...:
 >          element = ...
 >          s += element
Wenn bei einer Liste ein Element angehängt wird werden vermutlich
nur eine 4 oder 8 byte lange Adresse in ein Feld angehängt.
Bei jedem Buchstabe je nach utf-darstellung 2 oder 4 byte.
( Bei diakritischen Zeichen entsprechend mehr)

Wenn bei Speicherplatz eines Feldes nicht bei jeden neuen
Element ein neues Feld angelegt wird,
sondern bei Erweiterungen hinten vielleicht 20% Platz
für Erweiterungen reserviert werden,
dürfte es einiges schneller gehen.

 > (String-Konkatenation ist in Python(3)
 > zumindest bei langen Strings auch schön linear)

In Python2 war jeder Buchstabe 1 byte;
utf- Sonderzeichen wie ö Zeichen waren halt mehrere Buchstaben.
( Diakritische Zeichen sind auch in Python3 "mehr als ein Buchstabe"
   was z.B. bei Indizierung, Zerlegung etc.
   unerwartete Effekte haben kann.)

Hermann
    der nicht sagen kann, ob für strings mit gleichem Inhalt
    jedes mal neuer Speicherplatz angelegt wird,
    oder eine hash Suche losläuft.

-- 
http://www.hermann-riemann.de


Mehr Informationen über die Mailingliste python-de