Warum sind Listenverständnisse in Python schneller als das Anhängen von Listen?

Barbara Streisand
Freigeben: 2024-10-28 16:58:29
Original
120 Leute haben es durchsucht

Why Are List Comprehensions Faster Than List Appending in Python?

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>
Nach dem Login kopieren

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:

  • Eliminierung des Attributladens und von Funktionsaufrufen: Beim Anhängen von Listen erfordert jede Iteration das Laden des Append-Attributs der Liste und den Aufruf als Funktion. Listenverständnisse eliminieren diesen Overhead, indem bei Bedarf eine neue Liste erstellt wird.
  • Unterbrechung und Wiederaufnahme im Vergleich zur sofortigen Listenerstellung: Das Anhalten und Fortsetzen des Frames einer Funktion ist im Allgemeinen langsamer als das direkte Erstellen einer Liste bei Bedarf .

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>
Nach dem Login kopieren

Das Zerlegen dieser Funktionen mit dem dis-Modul zeigt die Unterschiede:

<code class="python">dis.dis(f1)
dis.dis(f2)</code>
Nach dem Login kopieren

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!

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
Neueste Artikel des Autors
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!