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
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
przewaga nad czym? –
"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