2013-05-02 12 views
20

Was ist der Vorteil der Verwendung einer list comprehension über eine for-Schleife in Python?Was ist der Vorteil eines Listenverständnisses gegenüber einer for-Schleife?

Ist es hauptsächlich, um es lesbarer zu machen, oder gibt es andere Gründe, ein Listenverständnis statt einer Schleife zu verwenden?

+2

Ich denke, dass sie in den meisten (wenn nicht allen) Fällen schneller sind als für Schleifen. Das heißt, abgesehen von der Schönheit von ihnen :) – BenDundee

+2

Vorteil gegenüber was? –

+0

"Wir erwarten, dass Antworten durch Fakten, Referenzen oder spezifische Fachkenntnisse gestützt werden, aber diese Frage wird wahrscheinlich Debatten, Argumente, Umfragen oder ausgedehnte Diskussionen anregen." Es scheint, dass diese Frage mit "spezifischen Fakten [und] spezifischem Fachwissen" unterstützt werden kann. Als geschlossen zu markieren ist BS, IMO. – BenDundee

Antwort

37

Liste Comprehensions ist kompakt und schneller als eine explizite for Schleife Aufbau eine Liste:

def slower(): 
    result = [] 
    for elem in some_iterable: 
     result.append(elem) 
    return result 

def faster(): 
    return [elem for elem in some_iterable] 

Dies weil rufe .append() auf einem list bewirkt, dass das List-Objekt (in Blöcken) zu wachsen, um Platz zu schaffen für neue Elemente einzeln, während die Liste Verständnis sammelt alle Elemente, bevor Sie die list Schaffung der Elemente in einem Rutsch passen:

>>> some_iterable = range(1000) 
>>> import timeit 
>>> timeit.timeit('f()', 'from __main__ import slower as f', number=10000) 
1.4456570148468018 
>>> timeit.timeit('f()', 'from __main__ import faster as f', number=10000) 
0.49323201179504395 
+0

Sie machen auch den obigen Code klarer. (Ich denke, Sie decken das bereits ab, indem Sie sie "explizit" nennen.) –

Verwandte Themen