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
fonte
2013-05-02 15:23:37
Penso che siano più veloci dei loop nella maggior parte dei casi (se non tutti). Cioè, a parte la bellezza di loro :) – BenDundee
vantaggio su cosa? –
"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