Warum sind Python-Listenverständnisse so viel schneller als das Anhängen an Listen?

DDD
Freigeben: 2024-11-01 12:54:29
Original
190 Leute haben es durchsucht

 Why Are Python List Comprehensions So Much Faster Than Appending to Lists?

Warum Python-Listenverständnisse das Anhängen von Listen übertreffen

Python-Programmierer bemerken oft eine erhebliche Leistungslücke zwischen Listenverständnissen und dem Anhängen an eine Liste. Während Listenverständnis allgemein als eine syntaktische Erleichterung wahrgenommen wird, weisen sie eine überlegene Geschwindigkeit auf, die über die bloße Ausdruckskraft hinausgeht.

Um dieses Phänomen zu veranschaulichen, betrachten Sie die folgenden Zeitmessungen:

>>> import timeit
>>> timeit.timeit(stmt='''
t = []
for i in range(10000):
    t.append(i)''', number=10000)
9.467898777974142

>>> timeit.timeit(stmt='t= [i for i in range(10000)]', number=10000)
4.1138417314859
Nach dem Login kopieren

Wie aus hervorgeht Bei den Messungen ist das Verstehen der Liste fast 50 % schneller als das Anhängen. Schauen wir uns die zugrunde liegenden Gründe genauer an.

Der syntaktische Zuckerirrtum

Listenverständnisse sind nicht nur syntaktischer Zucker für reguläre for-Schleifen. Sie vermeiden den Mehraufwand, der mit dem Zugriff und Aufruf des Append-Attributs in jeder Iteration verbunden ist. Dadurch entfällt das Aussetzen und Wiederaufnehmen mehrerer Funktionsrahmen, was von Natur aus langsamer ist als das direkte Erstellen einer Liste.

Bytecode-Vergleich

Die Untersuchung der disassemblierten Bytecodes für die beiden Ansätze gibt Aufschluss über deren Leistungsunterschiede:

# Appending to a List
  18 LOAD_FAST                0 (l)
  20 LOAD_METHOD              1 (append)
  22 LOAD_FAST                1 (i)
  24 CALL_METHOD              1
  26 POP_TOP

# List Comprehension
              2 BUILD_LIST               0
              8 LOAD_FAST                1 (i)
             10 LIST_APPEND              2
Nach dem Login kopieren

Der Aufruf der Append-Methode in der ersten Funktion verursacht zusätzlichen Overhead, während das Listenverständnis die neu erstellte Liste direkt erweitert.

Praktische Auswirkungen

In Szenarien, in denen die Leistung im Vordergrund steht , Listenverständnisse sollten der bevorzugte Ansatz gegenüber dem Anhängen an eine Liste sein. Ihre überlegene Geschwindigkeit beruht auf ihrer Fähigkeit, überflüssige Bytecodes und den Funktionsaufruf-Overhead zu umgehen.

Das obige ist der detaillierte Inhalt vonWarum sind Python-Listenverständnisse so viel schneller als das Anhängen an Listen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!