n-dim permutation matrix/generator?

Anton Vredegoor anton.vredegoor at gmail.com
Mon Nov 20 15:26:33 CET 2006


robert wrote:

> for the purpose of flat n-dim iteration a function or generator 
> ndim_permute(*v) should compute or generate a list of tuples like:
> 
> ndim_permute( (0,1,2), (0,1), (0,1), ) ->
> 
> 0 0 0
> 0 0 1
> 0 0 2
> 0 1 0
> 0 1 1
> 0 1 1

hmm ... shouldn't his be (0 1 2) ?

> 1 0 1
> ....
> 
> 
> what is a good solution? Or is there already a total iterator existing 
> somewhere in the stdlib?

I think there are good solutions in the python cookbook at:

http://aspn.activestate.com/ASPN/Cookbook/Python

But it gives a page mentioning 'system difficulties' now, so I can't 
check. Someone else will post the link to their favorite recipe. 
Meanwhile, this gives me a chance to plug some of my experimental code :-)

A.

def ncycle(seq,n):
     while True:
         for x in seq:
             for dummy in xrange(n):
                 yield x

def cross(*args):
     p,R = 1,[]
     for arg in args:
         L = list(arg)
         R.append(ncycle(L,p))
         p *= len(L)
     R.reverse()
     for dummy in xrange(p):
         yield tuple(x.next() for x in R)

def test():
     for x in cross((0,1,2), (0,1), (0,1)):
         print x

if __name__=='__main__':
     test()










More information about the Python-list mailing list