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

Reply via email to