Search code examples
pythonpython-3.xlistpython-itertools

All Possible combination with Main list containing sublists and without repeating the items in each subgroup


Using Python, I am looking for a solution to the following issue:

[['Orange', 'Banana'], ['Blue', 'Yellow', 'Green'], ['Bike'], ['Ocean', 'Sky']]

The number of Items in each list in the result is 4

The combination has to result in all possible without repeating the members of each group in the same new sublist. All possible combinations should be:

[[Orange, Blue, Bike, Ocean],
[Banana, Blue, Bike, Ocean],        
[Orange, Yellow, Bike, Ocean],
[Banana, Yellow, Bike, Ocean],                           
[Orange, Green, Bike, Ocean],
[Banana, Green, Bike, Ocean],
[Orange, Blue, Bike, Sky],
[Banana, Blue, Bike, Sky],
[Orange, Yellow, Bike, Sky],
[Banana, Yellow, Bike, Sky],
[Orange, Green, Bike, Sky],
[Banana, Green, Bike, Sky]]

I am still trying to figure out how to sort it out. I appreciate any help on this.


Solution

  • IIUC, you're looking for itertools.product:

    import itertools as it
    
    list_of_lists = [['Orange', 'Banana'], ['Blue', 'Yellow', 'Green'], ['Bike'], ['Ocean', 'Sky']]
    
    list(it.product(*list_of_lists))
    # => [('Orange', 'Blue', 'Bike', 'Ocean'),
    #    ('Orange', 'Blue', 'Bike', 'Sky'),
    #    ('Orange', 'Yellow', 'Bike', 'Ocean'),
    #    ('Orange', 'Yellow', 'Bike', 'Sky'),
    #    ('Orange', 'Green', 'Bike', 'Ocean'),
    #    ('Orange', 'Green', 'Bike', 'Sky'),
    #    ('Banana', 'Blue', 'Bike', 'Ocean'),
    #    ('Banana', 'Blue', 'Bike', 'Sky'),
    #    ('Banana', 'Yellow', 'Bike', 'Ocean'),
    #    ('Banana', 'Yellow', 'Bike', 'Sky'),
    #    ('Banana', 'Green', 'Bike', 'Ocean'),
    #    ('Banana', 'Green', 'Bike', 'Sky')]