gjc
public text v1 · immutabledef permutations(param1, param2): assert isiterable(param1) assert isiterable(param2) param_iters = [iter(param2) for x in param1] params = [x.next() for x in param_iters] while True: yield zip(param1, params) for pos in xrange(len(param1) - 1, -1, -1): try: params[pos] = param_iters[pos].next() except StopIteration: param_iters[pos] = iter(param2) params[pos] = param_iters[pos].next() else: break else: break