2012-03-15 72 views
1

迭代更好或者lambda函數在時間處理或內存使用和其他方面更好?Lambda函數更好還是迭代?

例如:

x = [10, 20, 30] 

for y in x: 
    if y>10 or y<20: 
     print y 

這是好還是lambda函數? 我希望得到有關時間處理,內存使用情況或任何其他比較的答案。

+0

爲什麼降票?這很荒謬。 – sam 2012-03-15 12:28:34

回答

3

對於您的情況,經典循環顯然更好,因爲您不想創建新列表或生成器。

不創建這樣的對象使其更具有內存效率,並且不會爲每個元素調用函數使其更具性能。

5

迭代器和lambda是兩個完全不同的東西。 lambda是一個簡單的內聯函數,迭代器是一個返回連續對象的對象。您的示例有兩個主要問題:您正在測試x而不是y,並且x中的所有值都將通過y>10 or y<20。因此,糾正那些,你的例子可以使用迭代這樣的拉姆達書面:

for value in filter(lamdba y: y < 10 or y > 20, x): 
    print(value) 

有幾種方法可以做到這一點,但在性能方面,它取決於你是什麼樣的數據處理,你如何處理它以及你處理的是多少。請參閱http://wiki.python.org/moin/PythonSpeed/PerformanceTips以獲取有用的指導。

1

我發現列表理解符號比函數符號更容易閱讀,特別是當要映射表達式的複雜度增加時。另外,列表理解的執行速度比使用map和lambda的解決方案快得多。這是因爲調用lambda函數會創建一個新的堆棧框架,而列表理解中的表達式不會創建新的堆棧框架。 >>http://python-history.blogspot.com/2010/06/from-list-comprehensions-to-generator.html

換句話說,無論你在lambda和loop/comprehension/generator之間做出選擇,都使用後者。我猜想寫你的例子最pythonic的方式會像

print [y for y in x if y < 20]