2013-05-13 24 views
6

Ich habe eine Liste wie l=['a', 'b', 'c'] Ich möchte eine Zeichenfolge wie 'abc'. So in der Tat ist das Ergebnis l[0]+l[1]+l[2], die auch alsVerketten von Elementen einer Liste

writte werden kann
s = '' 
for i in l: 
    s += i 

Gibt es eine Möglichkeit, dies mehr elegant zu tun?

Antwort

15

Verwendung str.join():

s = ''.join(l) 

Die Zeichenfolge, auf dem Sie nennen dies wird als Trennzeichen zwischen den Saiten in l verwendet:

>>> l=['a', 'b', 'c'] 
>>> ''.join(l) 
'abc' 
>>> '-'.join(l) 
'a-b-c' 
>>> ' - spam ham and eggs - '.join(l) 
'a - spam ham and eggs - b - spam ham and eggs - c' 

Mit str.join() ist viel schneller als Ihre Elemente verketten Stück für Stück, da für jede Verkettung ein neues String-Objekt erzeugt werden muss. str.join() muss nur ein neues String-Objekt erstellen.

Beachten Sie, dass str.join() die Eingangsfolge zweimal durchlaufen wird. Einmal, um zu berechnen, wie groß der Ausgabe-String sein muss, und noch einmal, um ihn zu erstellen. Als Nebeneffekt, das bedeutet, dass anstelle eines Generators Ausdruck eine Liste Verständnis mit schneller ist:

slower_gen_expr = ' - '.join('{}: {}'.format(key, value) for key, value in some_dict) 
faster_list_comp = ' - '.join(['{}: {}'.format(key, value) for key, value in some_dict]) 
+2

+1 Q/A von 25 s ziemlich schwer versetzt zu passen ...... –

+3

Der Ninja wieder zuschlägt . –

+0

Ein guter Link: http://stackoverflow.com/questions/3055477/how-slow-is-pythons-string-concatenation-vs-str-join Ich mag, wie diese Antwort für eine wirklich grundlegende Frage so detailliert ist – jamylak

Verwandte Themen