2013-05-02 48 views
20

在Python中使用list comprehension而不是for循環的優點是什麼?列表理解優於for循環的優點是什麼?

它主要是爲了讓它更具人性可讀性,還是有其他理由使用列表理解而不是循環?

+2

我認爲他們比大多數(如果不是全部)情況下的循環更快。那就是,除了他們的美麗之外:) – BenDundee 2013-05-02 15:21:08

+2

優勢在哪? – 2013-05-02 15:22:17

+0

「我們期望答案得到事實,參考資料或具體專業知識的支持,但這個問題可能會引發爭論,爭論,投票或擴大討論。」似乎這個問題可以用「具體的事實[和]具體的專業知識」來支持。標記爲關閉的是BS,IMO。 – BenDundee 2013-05-02 15:37:03

回答

37

列表理解是比它更緊湊的明確for循環建立一個列表更快:

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

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

這是因爲在list調用.append()導致列表對象增長(以塊的形式),以騰出空間而列表理解首先收集所有元素,然後創建list以便一次性適合元素:

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

他們也使上面的代碼更清晰。 (我想你已經把它稱爲「明確」了。) – 2013-05-02 15:27:57