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.
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.
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.
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!