Il modo migliore di aggiungere una stringa a una variabile stringa è usare +
o +=
. Questo perché è leggibile e veloce. Sono anche altrettanto veloci, quello che scegli è una questione di gusti, l'ultimo è il più comune. Ecco i tempi con il timeit
modulo:
a = a + b:
0.11338996887207031
a += b:
0.11040496826171875
Tuttavia, coloro che consigliano di avere elenchi e aggiungerli e quindi unirli a tali elenchi, lo fanno perché l'aggiunta di una stringa a un elenco è presumibilmente molto veloce rispetto all'estensione di una stringa. E questo può essere vero, in alcuni casi. Ecco, ad esempio, un milione di accodamenti di una stringa di un carattere, prima a una stringa, quindi a un elenco:
a += b:
0.10780501365661621
a.append(b):
0.1123361587524414
OK, risulta che anche quando la stringa risultante è lunga un milione di caratteri, l'aggiunta è stata ancora più veloce.
Ora proviamo ad aggiungere una stringa lunga di mille caratteri centomila volte:
a += b:
0.41823482513427734
a.append(b):
0.010656118392944336
La stringa di fine, quindi, finisce per essere lunga circa 100 MB. È stato piuttosto lento, l'aggiunta di un elenco è stata molto più veloce. Che quel tempismo non includa il finale a.join()
. Quindi quanto ci vorrebbe?
a.join(a):
0.43739795684814453
Oups. Risulta anche in questo caso, aggiungere / unire è più lento.
Da dove viene questa raccomandazione? Python 2?
a += b:
0.165287017822
a.append(b):
0.0132720470428
a.join(a):
0.114929914474
Bene, aggiungere / unire è marginalmente più veloce lì se stai usando stringhe estremamente lunghe (cosa che di solito non sei, cosa avresti una stringa che ha 100 MB in memoria?)
Ma il vero copertoncino è Python 2.3. Dove non ti mostrerò nemmeno i tempi, perché è così lento che non è ancora finito. Questi test all'improvviso richiedono pochi minuti . Tranne l'appendice / join, che è veloce come in seguito Pythons.
Sì. La concatenazione di stringhe era molto lenta in Python all'età della pietra. Ma su 2.4 non è più (o almeno Python 2.4.7), quindi la raccomandazione di utilizzare append / join è diventata obsoleta nel 2008, quando Python 2.3 ha smesso di essere aggiornato e avresti dovuto smettere di usarlo. :-)
(Aggiornamento: Risulta quando ho eseguito i test con più attenzione rispetto all'uso +
ed +=
è più veloce anche per due stringhe su Python 2.3. La raccomandazione da usare ''.join()
deve essere un malinteso)
Tuttavia, questo è CPython. Altre implementazioni possono avere altre preoccupazioni. E questo è solo un altro motivo per cui l'ottimizzazione prematura è la radice di tutti i mali. Non utilizzare una tecnica che si suppone "più veloce" a meno che non la si misuri per prima.
Pertanto la versione "migliore" per eseguire la concatenazione di stringhe è utilizzare + o + = . E se questo risulta essere lento per te, il che è abbastanza improbabile, allora fai qualcos'altro.
Quindi perché uso molto append / join nel mio codice? Perché a volte è in realtà più chiaro. Soprattutto quando tutto ciò che dovresti concatenare insieme dovrebbe essere separato da spazi o virgole o newline.