Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Hermann Riemann Newsgroups: de.comp.lang.python Subject: Re: strings zusammensetzen. Date: Sat, 16 Sep 2017 16:19:04 +0200 Lines: 46 Message-ID: References: <9gjg7e-jn3.ln1@gate.homenet> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: individual.net TkQcfFzC4WU7oNXIgzwXMwSjRIcQMASN1Q+dcRQ0eKVWSXK4UV Cancel-Lock: sha1:l8J3nsnUqYqNIj6xJgcZW2D5Gis= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 In-Reply-To: Content-Language: de-DE Xref: csiph.com de.comp.lang.python:4910 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