Sometimes, while working with Python strings, we can have problem when we have data in a string that is a comma or any delim separated. We might want to perform a cartesian product with other similar strings to get all possible pairs of data. Let us discuss certain ways in which this task can be performed.
Method #1 : Using list comprehension + split()
This task can be performed using list comprehension. In this, we perform the task of extracting individual elements using split(). The task of list comprehension is to form pairs.
Python3
# Python3 code to demonstrate working of # Cartesian product of string elements # Using split() + list comprehension # Initializing strings test_str1 = "gfg, is, best" test_str2 = "for, all, Lazyroar" # Printing original strings print ( "The original string 1 is : " + test_str1) print ( "The original string 2 is : " + test_str2) # Cartesian product of string elements # Using split() + list comprehension res = [sub1 + sub2 for sub1 in test_str1.split( ", " ) for sub2 in test_str2.split( ", " )] # Printing result print ( "Cartesian product list : " + str (res)) |
The original string 1 is : gfg, is, best The original string 2 is : for, all, Lazyroar Cartesian product list : ['gfgfor', 'gfgall', 'gfgLazyroar', 'isfor', 'isall', 'isLazyroar', 'bestfor', 'bestall', 'bestLazyroar']
Method #2: Using List comprehension + product()
The combination of the above functions can be used to perform this task. In this, we employ product() in place of nested comprehension to perform the task of pairing.
Python3
# Python3 code to demonstrate working of # Cartesian product of string elements # Using product() + list comprehension from itertools import product # initializing strings test_str1 = "gfg, is, best" test_str2 = "for, all, Lazyroar" # printing original strings print ( "The original string 1 is : " + test_str1) print ( "The original string 2 is : " + test_str2) # Cartesian product of string elements # Using product() + list comprehension res = [sub1 + sub2 for sub1, sub2 in product(test_str1.split( ", " ), test_str2.split( ", " ))] # printing result print ( "Cartesian product list : " + str (res)) |
The original string 1 is : gfg, is, best The original string 2 is : for, all, Lazyroar Cartesian product list : ['gfgfor', 'gfgall', 'gfgLazyroar', 'isfor', 'isall', 'isLazyroar', 'bestfor', 'bestall', 'bestLazyroar']
Method 3: Using nested for loops
- Create two lists by splitting the input strings using the split() method.
- Initialize an empty list to store the cartesian product of the strings.
- Use two nested for loops to iterate through each element of the two lists and concatenate them.
- Append the concatenated string to the empty list created in step 2.
- Return the list of cartesian product strings.
Python3
# Python3 code to demonstrate working of # Cartesian product of string elements # using nested for loops # initializing strings test_str1 = "gfg, is, best" test_str2 = "for, all, Lazyroar" # printing original strings print ( "The original string 1 is : " + test_str1) print ( "The original string 2 is : " + test_str2) # Creating two lists by splitting input strings list1 = test_str1.split( ", " ) list2 = test_str2.split( ", " ) # initializing empty list to store cartesian product of strings cartesian_product = [] # Using nested for loops to iterate through each element of the two lists and concatenate them. for word1 in list1: for word2 in list2: cartesian_product.append(word1 + word2) # printing result print ( "Cartesian product list : " + str (cartesian_product)) |
The original string 1 is : gfg, is, best The original string 2 is : for, all, Lazyroar Cartesian product list : ['gfgfor', 'gfgall', 'gfgLazyroar', 'isfor', 'isall', 'isLazyroar', 'bestfor', 'bestall', 'bestLazyroar']
Time Complexity: O(n^2)
The nested for loop iterates through all the elements of both the lists, so the time complexity will be O(n^2), where n is the length of the input lists.
Auxiliary Space: O(n^2)
The space required by this method is O(n^2) because we are storing all the possible combinations in the cartesian_product list.
Method #4: Using itertools.product()
Step-by-step approach:
- Import the itertools module which provides various tools for creating iterators.
- Initialize the strings
- Split the strings into lists using the split() method and strip any whitespaces
- Use the product() function from itertools to generate the Cartesian product of the two lists
- Flatten the resulting list of tuples into a single list
- Print the final result
Python3
# Python3 code to demonstrate working of # Cartesian product of string elements # using itertools.product() # importing itertools module from itertools import product # initializing strings test_str1 = "gfg, is, best" test_str2 = "for, all, Lazyroar" # Splitting strings into lists list1 = [word.strip() for word in test_str1.split( ',' )] list2 = [word.strip() for word in test_str2.split( ',' )] # Using itertools.product() to generate Cartesian product cartesian_product = list (product(list1, list2)) # Flattening the list of tuples into a single list cartesian_product = [word1 + word2 for word1, word2 in cartesian_product] # printing result print ( "Cartesian product list : " + str (cartesian_product)) |
Cartesian product list : ['gfgfor', 'gfgall', 'gfgLazyroar', 'isfor', 'isall', 'isLazyroar', 'bestfor', 'bestall', 'bestLazyroar']
The time complexity of this method is O(n*m), where n is the length of the first list and m is the length of the second list.
The auxiliary space required by this method is O(n*m), as we store all possible combinations of elements from both lists in the cartesian_product list.