mattia wrote: > Hi all, I a list of jobs and each job has to be processed in a particular > order by a list of machines. > A simple representation is: > # Ordering of machines > JOB1 = [3, 1, 2, 4] > JOB2 = [2, 3, 1, 4] > JOBS = [JOB1, JOB2] > NJOBS = len(JOBS) > Now, I have a list of jobs and I want to have the associated list of > machines, e.g: > [JOB1, JOB1, JOB2] --> [3, 1, 2] > My original idea was to have a dict with associated the job number and an > iterator associated by the list of machines: > job_machine = dict((x+1, iter(JOBS[x])) for x in range(NJOBS)) > Now, something like: > for x in job_list: > print(next(job_machine[x])) > Works good, but imagine I have a list of job_list, now obviously I have a > StopIteration exception after the > first list. So, I'm looking for a way to "reset" the next() value every > time i complete the scan of a list.
don't you just want to have a new job machine? for job_list in job_list_list: job_machine = dict((x+1, iter(JOBS[x])) for x in range(NJOBS)) for x in job_list: print(next(job_machine[x])) you can certainly write a generator that resets itself - i've done it by adding a special reset exception and then using generator.throw(Reset()) - but it's a lot more complicated and i don't think you need it. if you do, you need to look at writing generators explicitly using yield, and then at "enhanced generators" for using throw(). andrew -- http://mail.python.org/mailman/listinfo/python-list