howto handle nested for

Neil Cerutti neilc at norwich.edu
Fri Sep 28 16:38:56 EDT 2012


On 2012-09-28, Laszlo Nagy <gandalf at shopzeus.com> wrote:
> In your example, it seem that the iterable of the for loop is
> always the same: range(n_sysms). It seems to be a number. Is
> that true? If that is so, then here is something useful:
>
> import copy
>
> class MultiLevelIterator(object):
>      def __init__(self,levels,n):
>          assert(levels>0)
>          assert(n>0)
>          self.levels = levels
>          self.values = [0]*levels
>          self.n = n
>
>      def __iter__(self):
>          return self
>
>      def next(self):
>          res = copy.copy(self.values)
>          idx = self.levels-1
>          while idx>=0:
>              self.values[idx]+=1
>              if self.values[idx]>=self.n:
>                  self.values[idx] = 0
>                  idx-=1
>              else:
>                  return res
>          raise StopIteration
>
> i = MultiLevelIterator(2,3)
> for values in i:
>      print values
>
> This will print:
>
> [0, 0]
> [0, 1]
> [0, 2]
> [1, 0]
> [1, 1]
> [1, 2]
> [2, 0]
> [2, 1]

It looks like you might have missed the last one. Also, be sure
to check itertools for occasionally for cool stuff like this.

>>> for values in itertools.product(range(3), repeat=2):
...   print(values)
...
(0, 0)
(0, 1)
(0, 2)
(1, 0)
(1, 1)
(1, 2)
(2, 0)
(2, 1)
(2, 2)

-- 
Neil Cerutti



More information about the Python-list mailing list