2012-03-15 71 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]