By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
 439,932 Members | 1,944 Online
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 439,932 IT Pros & Developers. It's quick & easy.

# n-dim permutation matrix/generator?

 P: n/a 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 1 0 1 ..... what is a good solution? Or is there already a total iterator existing somewhere in the stdlib? robert Nov 20 '06 #1
Share this Question
2 Replies

 P: n/a 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() Nov 20 '06 #2

 P: n/a If your products are not too big you may use the following approach def cross(*L): P=[()] for i in range(len(L)): P_=[] for p in P: for el in L[i]: P_.append(p+(el,)) P = P_ return P if __name__ == '__main__': for x in cross((0,1,2), (0,1), (0,1)): print x Nov 20 '06 #3

### This discussion thread is closed

Replies have been disabled for this discussion.