ml1n wrote: > I'm not really sure how to explain this so maybe some example code is > best. This code makes a list of objects by taking a list of ints and > combining them with a constant: > > class foo: > def __init__(self): > self.a = 0 > self.b = 0 > > def func(a,b): > f = new foo() > f.a = a > f.b = b > return f > > constants = [1]*6 > vars = [1,2,3,4,5,6] > objects = map(func,vars,constants) > > In the real world I need to do this as quick as possible (without > resorting to c) and there are several constants. (The constant is only > constant to each list so I can't make it a default argument to func.) > My question is, can anyone think of a way to do this efficiently > without having to use the `dummy` list of constants and would it be > quicker?
Here are two more ways to achieve what you want, but you have to time them youself. >>> from itertools import starmap, izip, repeat >>> class Foo: ... def __init__(self, a, b): ... self.a = a ... self.b = b ... def __repr__(self): ... return "Foo(a=%r, b=%r)" % (self.a, self.b) ... >>> constants = repeat(1) >>> vars = [1, 2, 3] >>> list(starmap(Foo, izip(vars, constants))) [Foo(a=1, b=1), Foo(a=2, b=1), Foo(a=3, b=1)] This requires Python 2.5: >>> from functools import partial >>> map(partial(Foo, b=1), vars) [Foo(a=1, b=1), Foo(a=2, b=1), Foo(a=3, b=1)] Peter -- http://mail.python.org/mailman/listinfo/python-list