Heim  >  Artikel  >  Backend-Entwicklung  >  Warum sind Python-Listenverständnisse so viel schneller als das Anhängen an Listen?

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

DDD
DDDOriginal
2024-11-01 12:54:29181Durchsuche

 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

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

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!

Stellungnahme:
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