2013-05-02 14 views
20

Qual è il vantaggio dell'uso di list comprehension su un ciclo for in Python?Qual è il vantaggio di una comprensione di lista su un ciclo for?

È principalmente per renderlo più leggibile, oppure ci sono altri motivi per usare una comprensione di lista invece di un ciclo?

+2

Penso che siano più veloci dei loop nella maggior parte dei casi (se non tutti). Cioè, a parte la bellezza di loro :) – BenDundee

+2

vantaggio su cosa? –

+0

"Ci aspettiamo che le risposte siano supportate da fatti, riferimenti o competenze specifiche, ma questa domanda probabilmente solleciterà dibattiti, discussioni, sondaggi o discussioni estese". Sembra che questa domanda possa essere supportata con "fatti specifici [e] competenze specifiche". Marcare che sia chiuso è BS, IMO. – BenDundee

risposta

37

di lista sono più compatti e più veloce di un esplicito for ciclo costruzione di una lista:

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

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

Ciò è dovuto al fatto chiamando .append() su un list fa sì che l'oggetto lista a crescere (in blocchi) per fare spazio per i nuovi elementi singolarmente, mentre la lista di comprensione raccoglie tutti gli elementi prima di creare il list per adattare gli elementi in un colpo solo:

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

Inoltre rendono più chiaro il codice precedente. (Penso che lo copra già definendoli "espliciti"). –

Problemi correlati