Ist die Liste wirklich schneller als die String-Verkettung in Python?

Ich finde, dass String-Verkettung scheint weniger Python-Bytecode als Liste beitreten.

Dies ist ein Beispiel.

Test.py:

a = ''.join(['a', 'b', 'c']) b = 'a' + 'b' + 'c' 

Dann python -m dis test.py ich python -m dis test.py . Ich habe den folgenden Python-Bytecode (Python 2.7):

   1 0 LOAD_CONST 0 ('')
               3 LOAD_ATTR 0 (beitreten)
               6 LOAD_CONST 1 ('a')
               9 LOAD_CONST 2 ('b')
              12 LOAD_CONST 3 ('c')
              15 BUILD_LIST 3
              18 CALL_FUNKTION 1
              21 STORE_NAME 1 (a)

   3 24 LOAD_CONST 6 ('abc')
              27 STORE_NAME 2 (b)
              30 LOAD_CONST 4 (keine)
              33 RETURN_VALUE  

Offensichtlich ist die Bytecode-Nummer der String-Verkettung weniger.Es lädt nur String 'abc' direkt.

Kann jemand erklären, warum wir immer sagen, dass Liste beitreten ist viel besser?

3 Solutions collect form web for “Ist die Liste wirklich schneller als die String-Verkettung in Python?”

Von der effizienten String-Verkettung in Python

Method 1 : 'a' + 'b' + 'c'

Method 6 : a = '' .join (['a', 'b', 'c'])

20.000 Integers wurden in einen String 86kb lang verkettet:

Pic

  Concatenations per second Process size (kB) Method 1 3770 2424 Method 6 119,800 3000 

Fazit: JA , str.join() ist deutlich schneller als typische Verkettung ( str1+str2 ).

weil

 ''.join(my_list) 

Ist viel besser als

 my_list[0] + my_list[1] 

Und besser als

 my_list[0] + my_list[1] + my_list[2] 

Und besser als

 my_list[0] + my_list[1] + my_list[2] + my_list[3] 

und besser…

Zusamenfassend:

 print 'better than' print ' + '.join('my_list[{}]'.format(i) for i in xrange(x)) 

Für irgendwelche x

Glaub es nicht! Immer Beweise!

Quelle: Ich starrte python Quellcode für eine Stunde und berechnete Komplexität!

Meine Erkenntnisse.

Für 2 Saiten. (Angenommen, n ist die Länge der beiden Strings)

 Concat (+) - O(n) Join - O(n+k) effectively O(n) Format - O(2n+k) effectively O(n) 

Für mehr als 2 Saiten. (Angenommen, n ist die Länge aller Strings)

 Concat (+) - O(n^2) Join - O(n+k) effectively O(n) Format - O(2n+k) effectively O(n) 

ERGEBNIS:

Wenn Sie zwei Strings technisch Verkettung (+) ist besser, effektiv, obwohl es genau das gleiche wie beitreten und Format.

Wenn Sie mehr als zwei Strings haben, wird Concat schrecklich und beitreten und Format sind effektiv das gleiche, obwohl technisch beitreten ist ein bisschen besser.

ZUSAMMENFASSUNG:

Wenn Sie sich nicht um Effizienz bemühen, verwenden Sie eine der oben genannten. (Obwohl du die Frage gefragt hast, würde ich dich davon übernehmen,

Deswegen –

Wenn du 2 Strings hast, kannst du Concat benutzen (wenn nicht in einer Schleife!) Wenn du mehr als zwei Strings hast (alle Strings) (oder in einer Schleife), kannst du beitreten Wenn du noch keine Strings benutzt Format, weil duh.

Hoffe das hilft!

  • Wie nimmst du einen User-Input als Float?
  • Öffnen und Lesen einer Excel .xlsx Datei in Python
  • Erstellen Sie 3D-Objekt aus 3 Ansichten
  • Python JSON bekommt nur Schlüssel in der ersten Ebene
  • Wie installiere ich snappy C-Bibliotheken unter Windows 10 für python-snappy in Anaconda?
  • Distutils Compiler Optionen Konfiguration
  • So stellen Sie eine Klickuhr in ein Pygame-Fenster ein
  • Python-Multiprocessing: Kill Producer und Consumer-Prozesse mit KeyboardInterrupt
  • Erste ursprüngliche Zeilennummer für Ausnahme in concurrent.futures
  • Bestellt Sets Python 2.7
  • Python For Loop List Interessantes Ergebnis
  • Python ist die beste Programmiersprache der Welt.