2013-05-02 15 views
20

Jaka jest zaleta korzystania z pętli list comprehension nad for w języku Python?Jaka jest zaleta rozumienia list przez pętlę for?

Czy to głównie po to, aby było bardziej zrozumiałe dla człowieka, czy też istnieją inne powody, by używać listy zamiast pętli?

+2

Myślę, że są one szybsze niż w przypadku pętli w większości (jeśli nie wszystkich) przypadków. To znaczy, poza ich pięknem :) – BenDundee

+2

przewaga nad czym? –

+0

"Oczekujemy, że odpowiedzi będą poparte faktami, referencjami lub konkretną ekspertyzą, ale to pytanie prawdopodobnie zachęci do debaty, argumentacji, sondowania lub rozszerzonej dyskusji." Wydaje się, że to pytanie może być poparte "konkretnymi faktami [i] konkretną ekspertyzą". Oznaczenie do zamknięcia to BS, IMO. – BenDundee

Odpowiedz

37

Ułatwienia liście są bardziej kompaktowe i szybciej niż wyraźnego for pętli tworzenie listy:

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

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

to dlatego, nazywając .append() na list powoduje, że obiekt rośnie (w kawałkach) Lista, aby zrobić miejsce dla nowych elementów pojedynczo, podczas gdy zrozumienie listy gromadzi wszystkie elementy najpierw przed utworzeniem list, aby dopasować elementy za jednym razem:

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

Uczynią również powyższy kod jaśniejszym. (Myślę, że już to załatwisz, nazywając je "jawnymi".) –

Powiązane problemy