Peter Otten <__pete...@web.de> writes: > 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)
That's precisely it. I missed product. Thanks! > 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)] The star-syntax I didn't even know. And it was very useful. Thank you! -- https://mail.python.org/mailman/listinfo/python-list