On Thu, May 27, 2010 at 1:56 AM, Stefan Behnel <stefan...@behnel.de> wrote:
> If all items have the exact same type, you can get away with an unbound > method: > > class MyType(object): > ... > def safe(self): > ... > > itemlist = [ MyType() for i in range(20) ] > > # this is what you want: > from itertools import imap > for _ in imap(MyType.save, itemlist): pass > Thanks Stefan, I probably didn't state the problem properly. I was assuming the availability of a static method that could be passed on to map based solution (or imap for that matter). The question was, if one wants to apply a function on each member of list and discard the return value, is it possible to do it more efficiently than having a for loop in python and applying the function of each of the members? Take this run: from itertools import imap from timeit import Timer def save(x): 2 * x from itertools import imap from timeit import Timer def save(x): 2 * x def f1(): map(save, range(1000)) #simple map def f2(): for _ in imap(save, range(1000)): pass #imap def f3(): for x in range(1000):save(x) #simple iteration t1 = Timer("f1()", "from __main__ import f1") print "f1", t1.timeit(number=1000) t2 = Timer("f2()", "from __main__ import f2") print "f2", t2.timeit(number=1000) t3 = Timer("f3()", "from __main__ import f3") print "f3", t3.timeit(number=1000) The output for one run was: f1 0.393015034034 f2 0.476230638252 f3 0.376324923978 => simple for loop performs better than map/imap. Another problem with map/imap is that the memory cost is dependent on the length of the list (because of the intermediate mapped list stored) which is not the case for simple for loop. I hope I have explained it better this time. -- Regards Shashank Singh Senior Undergraduate, Department of Computer Science and Engineering Indian Institute of Technology Bombay shashank.sunny.si...@gmail.com http://www.cse.iitb.ac.in/~shashanksingh
-- http://mail.python.org/mailman/listinfo/python-list