On 17 Feb., 19:10, Andrej Mitrovic <andrej.mitrov...@gmail.com> wrote: > Hi, > > I couldn't figure out a better description for the Subject line, but > anyway, I have the following: > > _num_frames = 32 > _frames = range(0, _num_frames) # This is a list of actual objects, > I'm just pseudocoding here. > _values = [0, 1, 2, 3, 4] > > I want to call a function of _frames for each frame with a _values > argument, but in a way to "spread out" the actual values. > > I would want something similar to the following to be called: > > _frames[0].func(_values[0]) > _frames[1].func(_values[0]) > _frames[2].func(_values[0]) > _frames[3].func(_values[0]) > _frames[4].func(_values[1]) > _frames[5].func(_values[1]) > _frames[6].func(_values[1]) > _frames[7].func(_values[1]) > _frames[8].func(_values[2]) > ...etc... > > Both the _values list and _frames list can be of variable and uneven > size, which is what is giving me the problems. I'm using Python 2.6. > > I've tried the following workaround, but it often gives me inaccurate > results (due to integer division), so I had to add a safety check: > > num_frames = 32 > values = [0, 1, 2, 3, 4] > offset_step = num_frames / len(values) > for index in xrange(0, num_frames): > offset = index / offset_step > if offset > offset_values[-1]: > offset = offset_values[-1] > frames[index].func(values[offset]) > > There has to be a better way to do this. I'd appreciate any help. > Cheers!
Python 3.1: >>> def apply_spreaded(funcs, values): ... num_funcs = len(funcs) ... num_values = len(values) ... for i, func in enumerate(funcs): ... func(values[(i * num_values) // num_funcs]) >>> apply_spreaded([print] * 8, range(5)) 0 0 1 1 2 3 3 4 -- http://mail.python.org/mailman/listinfo/python-list