Boris Dorestand wrote: > Say we have [1,3,5,7], [2,3], [1,10]. I'd like to generate > > [1,2,1] > [1,2,10] > [1,3,1] > [1,3,10] > [3,2,1] > [3,2,10] > [3,3,1] > [3,3,10] > [5, ...] > ... > [7,3,10] > > The number of input lists is variable. The example shows three lists, > but there could be only one or ten lists or any other number of lists. > > I looked at itertools. There doesn't seem to be any procedure ready for > this. I might have to combine some of them but I'm not yet sure how.
itertools.product() seems to do what you want: >>> for t in itertools.product([1,3,5,7], [2,3], [1,10]): ... print(t) ... (1, 2, 1) (1, 2, 10) (1, 3, 1) (1, 3, 10) (3, 2, 1) (3, 2, 10) (3, 3, 1) (3, 3, 10) (5, 2, 1) (5, 2, 10) (5, 3, 1) (5, 3, 10) (7, 2, 1) (7, 2, 10) (7, 3, 1) (7, 3, 10) If you need lists instead of tuples convert them >>> list(t) [7, 3, 10] To pass a varying number of lists use a list of lists and a star argument: >>> lists = [[[1, 2], [3, 4]], [[10, 20, 30], [40, 50]]] >>> for item in lists: ... print(list(itertools.product(*item))) ... [(1, 3), (1, 4), (2, 3), (2, 4)] [(10, 40), (10, 50), (20, 40), (20, 50), (30, 40), (30, 50)] -- https://mail.python.org/mailman/listinfo/python-list