On Tue, Feb 9, 2010 at 10:52 AM, Srinivas Reddy Thatiparthy < srinivas_thatipar...@akebonosoft.com> wrote:
> > Thanks for the replies and I avoid using lambdas.. > Btw,Shall I avoid using filter and map ? > Because what ever filter and map do,I could seem to do the same with > Listcomprehensions.. > Is there any situation in which they fare better than list > comprehensions? > map, filter, reduce at al are orders slower when compared to list comprehensions, cuz each invocation of these cost one function call, whereas list comprehensions are optimized in the language. For example, >>> def f1(): [i for i in range(1000) if i % 3 == 0] ... >>> def f2(): filter(lambda x: x%3==0, range(1000)) And using timeit, >>> mytimeit.Timeit(f1, number=10000) '211.47 usec/pass' >>> mytimeit.Timeit(f2, number=10000) '319.08 usec/pass' The only advantage of map, filter etc over list comprehensions is that they are sometimes concise over the equivalent list comprehensions, when combined with already defined functions. For example, >>> [ x for x in range(1000) if (x%3==0) or (x%5==0)] >>> def f(x): (x%3==) or (y %5==0) >>> map(f, range(1000)) But again, keep in mind that these are much slower when compared to the list comprehension or generator equivalent. There are a few cases when a map function looks more "elegant" when compared to the equivalent list comp. For example, let us say you want to add together two lists. >>> l1=range(5, 10) >>> l2=range(10, 15) >>> map(lambda x,y: x+y, l1, l2) [15, 17, 19, 21, 23] There is no direct way to do this in list comp except taking the help of "zip". >>> [a+b for a,b in zip(l1,l2)] [15, 17, 19, 21, 23] But practicality beats purity. Given a choice, I will always use the latter instead of the former, irrespective of the "elegance", which is questionable and subjective anyway :) > Regards, > ~ Srini T > _______________________________________________ > BangPypers mailing list > BangPypers@python.org > http://mail.python.org/mailman/listinfo/bangpypers > -- --Anand _______________________________________________ BangPypers mailing list BangPypers@python.org http://mail.python.org/mailman/listinfo/bangpypers