Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Cartesian Product of any number of sets

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

Given N number of sets. The task is to write a program to perform a cartesian product of all the sets in a given order.
Example

Input:
1st set: 1 2
2nd set: A 
3rd set: x 
4th set: 5 6
Output:
[['1', 'A', 'x', '5'],
 ['1', 'A', 'x', '6'],
 ['2', 'A', 'x', '5'],
 ['2', 'A', 'x', '6']]

Input:
1st set: 1 2
2nd set: A 
3rd set: x y z 
Output:
[['1', 'A', 'x'],
 ['1', 'A', 'y'],
 ['1', 'A', 'z'],
 ['2', 'A', 'x'],
 ['2', 'A', 'y'],
 ['2', 'A', 'z']]

Approach: The approach is to compute the product of set-1 and set-2 at the beginning and then the resultant of set-1 and set-2 will have a product with set-3 and then the resultant of set-1, set-2, and set-3 will have a Cartesian product with set-4 and so on till set-n.
Below is the implementation of the above approach. 
 

Python3




# Python program for cartesian
# product of N-sets 
  
# function to find cartesian product of two sets 
def cartesianProduct(set_a, set_b):
    result =[]
    for i in range(0, len(set_a)):
        for j in range(0, len(set_b)):
  
            # for handling case having cartesian
            # product first time of two sets
            if type(set_a[i]) != list:         
                set_a[i] = [set_a[i]]
                  
            # copying all the members
            # of set_a to temp
            temp = [num for num in set_a[i]]
              
            # add member of set_b to 
            # temp to have cartesian product     
            temp.append(set_b[j])             
            result.append(temp)  
              
    return result
  
# Function to do a cartesian 
# product of N sets 
def Cartesian(list_a, n):
      
    # result of cartesian product
    # of all the sets taken two at a time
    temp = list_a[0]
      
    # do product of N sets 
    for i in range(1, n):
        temp = cartesianProduct(temp, list_a[i])
          
    print(temp)
  
# Driver Code
list_a = [[1, 2],          # set-1
          ['A'],          # set-2
          ['x', 'y', 'z']]   # set-3
            
# number of sets
n = len(list_a) 
  
# Function is called to perform 
# the cartesian product on list_a of size n 
Cartesian(list_a, n)

Output: 

[[1, 'A', 'x'],
 [1, 'A', 'y'],
 [1, 'A', 'z'], 
 [2, 'A', 'x'], 
 [2, 'A', 'y'], 
 [2, 'A', 'z']]

 

Time Complexity: O(n3)
Auxiliary Space: O(n*m), Here n is the number of sets and m is the maximum element in a set. The extra space is used to store the result.


My Personal Notes arrow_drop_up
Last Updated : 13 Mar, 2023
Like Article
Save Article
Similar Reads
Related Tutorials