Python - All possible concatenations in String List
Sometimes, while working with String lists, we can have a problem in which we need to perform all possible concatenations of all the strings that occur in list. This kind of problem can occur in domains such as day-day programming and school programming.
Let's discuss a way in which this task can be performed.
Input : test_list = ['Gfg', 'Best']
Output : ['Gfg', 'Best', 'GfgBest', 'BestGfg']Input : test_list = ['Gfg']
Output : ['Gfg']
Method 1: Using permutations() + join() + loop
The combination of above functions can be used to solve this problem. In this, we perform the task of concatenation using join() and all possible combination extraction using permutations().
# Python3 code to demonstrate working of
# All possible concatenations in String List
# Using permutations() + loop
from itertools import permutations
# initializing list
test_list = ['Gfg', 'is', 'Best']
# printing original list
print("The original list : " + str(test_list))
# All possible concatenations in String List
# Using permutations() + loop
temp = []
for idx in range(1, len(test_list) + 1):
temp.extend(list(permutations(test_list, idx)))
res = []
for ele in temp:
res.append("".join(ele))
# printing result
print("All String combinations : " + str(res))
Output
The original list : ['Gfg', 'is', 'Best'] All String combinations : ['Gfg', 'is', 'Best', 'Gfgis', 'GfgBest', 'isGfg', 'isBest', 'BestGfg', 'Bestis', 'GfgisBest', 'GfgBestis', 'isGfgBest', 'isBestGfg', 'BestGfgis', 'BestisGfg']
Time complexity: O(n*n!) where n is the length of the input list.
Auxiliary Space: O(n*n!) where n is the length of the input list. The space complexity is dominated by the number of permutations that are generated and stored in the temporary list temp.
Method - 2: Using recursion and concatenation:
Approach:
- Define a helper function helper(lst, i, j) that takes the input list lst and two indices i and j and performs the following steps:
- If i is equal to the length of the list lst, then we have reached the end of the list and we return a list containing the string at index j.
- If j is equal to the length of the list lst, then we have reached the end of a pass through the list and need to move on to the next index i by calling the helper function again with i+1 and 0 as the new indices.
- If i and j are not equal, then we concatenate the strings at indices i and j and add the resulting string to a list, along with the results of a recursive call to the helper function with the same i and j+1 indices.
- If i and j are equal, then we simply call the helper function again with the same i and j+1 indices.
- Finally, we return the results of calling the helper function with initial indices 0 and 0, concatenated with the original input list.
Below is the implementation of the above approach:
# Python program for the above approach
# Function to generate all possible combination
# using recursion
def concat_list4(lst):
def helper(lst, i, j):
if i == len(lst):
return [lst[j]]
if j == len(lst):
return helper(lst, i+1, 0)
if i != j:
return [lst[i] + lst[j]] + helper(lst, i, j+1)
return helper(lst, i, j+1)
return helper(lst, 0, 0) + lst
# Driver Code
# Test case 1
test_list1 = ['Gfg', 'Best']
output1 = concat_list4(test_list1)
print(output1) # Output: ['Gfg', 'Best', 'GfgBest', 'BestGfg']
# Test case 2
test_list2 = ['Gfg']
output2 = concat_list4(test_list2)
print(output2) # Output: ['Gfg']
Output
['GfgBest', 'BestGfg', 'Gfg', 'Gfg', 'Best'] ['Gfg', 'Gfg']
Time Complexity: O(N2)
Space Complexity: O(N2)