Heim > Artikel > Backend-Entwicklung > Warum sind Listenverständnisse in Python schneller als das Anhängen von Listen?
Warum Listenverständnisse besser abschneiden als das Anhängen von Listen
Obwohl Listenverständnisse lediglich als Ausdruckszucker wahrgenommen werden, weisen sie einen erheblichen Geschwindigkeitsvorteil gegenüber dem Anhängen von Listen auf . Diese Ungleichheit geht über die Ausdrucksunterschiede hinaus.
Betrachten Sie zur Veranschaulichung die folgenden Timeit-Benchmarks:
<code class="python">import timeit time = timeit.timeit('t=[]\nfor i in range(10000):\n t.append(i)', number=10000) time2 = timeit.timeit('t=[i for i in range(10000)]', number=10000)</code>
Die Ergebnisse zeigen, dass Listenverständnisse etwa 50 % schneller ausgeführt werden als das Anhängen an eine Liste.
Gründe für erhöhte Geschwindigkeit
Listenverständnisse nutzen mehrere Leistungsoptimierungen:
Beispiele
Beachten Sie die folgenden Codeausschnitte:
<code class="python">def f1(): l = [] # Create a new list for i in range(5): # Iterate through a range l.append(i) # Append each number to the list def f2(): [i for i in range(5)] # Use list comprehension to create a new list</code>
Das Zerlegen dieser Funktionen mit dem dis-Modul zeigt die Unterschiede:
<code class="python">dis.dis(f1) dis.dis(f2)</code>
In f1 beobachten wir die Erstellung einer Liste sowie das Laden und Aufrufen des Append-Attributs (Offsets 18 und 20). In f2 fehlen diese Operationen jedoch, was zu einem effizienteren Code führt.
Fazit
Listenverständnisse erzielen eine verbesserte Leistung, indem sie das Laden von Attributen, Funktionsaufrufe usw. eliminieren der mit der Unterbrechung und Wiederaufnahme von Funktionsrahmen verbundene Mehraufwand. Daher werden sie oft für die Erstellung neuer Listen empfohlen, bei denen es auf Geschwindigkeit ankommt.
Das obige ist der detaillierte Inhalt vonWarum sind Listenverständnisse in Python schneller als das Anhängen von Listen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!