Sometimes, while working with Python Strings, we can have problem in which we need to perform the split of strings on a particular deliminator. In this, we might need to flatten this to a single String List. Let’s discuss certain ways in which this task can be performed.
Method #1 : Using list comprehension + split() + extend()
The combination of above functions can be used to perform this task. In this, we perform the task of split, using split() and add split elements in list using extend().
Python3
test_list = [ 'gfg-is-best' , 'for-all' , 'geeks-and' , 'CS' ]
print ( "The original list is : " + str (test_list))
res = []
[res.extend(idx.split( "-" )) for idx in test_list]
print ( "The String List after extension : " + str (res))
|
Output
The original list is : ['gfg-is-best', 'for-all', 'geeks-and', 'CS']
The String List after extension : ['gfg', 'is', 'best', 'for', 'all', 'geeks', 'and', 'CS']
Time Complexity: O(n) where n is the total number of values in the list “test_list”.
Auxiliary Space: O(n) where n is the total number of values in the list “test_list”.
Method #2 : Using split() + join()
This is one of the way in which this task can be performed. In this, we perform the task of extension using join() and split().
Python3
test_list = [ 'gfg-is-best' , 'for-all' , 'geeks-and' , 'CS' ]
print ( "The original list is : " + str (test_list))
res = '-' .join(test_list).split( '-' )
print ( "The String List after extension : " + str (res))
|
Output
The original list is : ['gfg-is-best', 'for-all', 'geeks-and', 'CS']
The String List after extension : ['gfg', 'is', 'best', 'for', 'all', 'geeks', 'and', 'CS']
Time Complexity: O(n), where n is the length of the input list. This is because we’re using the split() + join() which has a time complexity of O(n) in the worst case.
Auxiliary Space: O(n), as we’re using additional space res other than the input list itself with the same size of input list.
Method #3: Using itertools.chain.from_iterable
Python3
import itertools
test_list = [ 'gfg-is-best' , 'for-all' , 'geeks-and' , 'CS' ]
print ( "The original list is : " + str (test_list))
res = list (itertools.chain.from_iterable(
map ( lambda x: x.split( '-' ), test_list)))
print ( "The String List after extension : " + str (res))
|
Output
The original list is : ['gfg-is-best', 'for-all', 'geeks-and', 'CS']
The String List after extension : ['gfg', 'is', 'best', 'for', 'all', 'geeks', 'and', 'CS']
Time Complexity: O(n), where n is the total number of characters in all strings.
Auxiliary Space: O(n), since we are storing the result in a list.
Method #4: Using the reduce function from the functools library
Python3
import functools
test_list = [ 'gfg-is-best' , 'for-all' , 'geeks-and' , 'CS' ]
print ( "The original list is : " + str (test_list))
res = functools. reduce ( lambda x, y: x + y.split( "-" ), test_list, [])
print (res)
|
Output
The original list is : ['gfg-is-best', 'for-all', 'geeks-and', 'CS']
['gfg', 'is', 'best', 'for', 'all', 'geeks', 'and', 'CS']
Time Complexity: O(n)
Auxiliary Space: O(n)
Method #5: Using the str.replace() method:
A list of strings and extracts individual words from them, combining all of the words into a single list. It does so by initializing an empty list called words, iterating over each string in the original list, removing any hyphens from the string, and then splitting it into individual words using the split() function. The resulting words are then added to the words list using the extend() method, which concatenates two lists.
In essence, this code is designed to extract individual words from a list of strings, and produce a new list that contains all of the words from the original list. It does this by first removing hyphens from the strings, and then using the split() function to extract individual words from each string. Finally, the code concatenates all of the resulting lists of words into a single list, which it outputs.
Python3
test_list = [ 'gfg-is-best' , 'for-all' , 'geeks-and' , 'CS' ]
words = []
print ( "The original list is : " + str (test_list))
for string in test_list:
words_in_string = string.replace( '-' , ' ' ).split()
words.extend(words_in_string)
print ( "The String List after extension : " + str (words))
|
Output
The original list is : ['gfg-is-best', 'for-all', 'geeks-and', 'CS']
The String List after extension : ['gfg', 'is', 'best', 'for', 'all', 'geeks', 'and', 'CS']
Time Complexity: O(n)
Auxiliary Space: O(n)
Method 6: Using nested for loops:
Step-by-step approach:
- Initialize the list test_list.
- Print the original list using the print() function.
- Initialize an empty list res to store the flattened list.
- Use nested for loops to iterate over each string in test_list, and then iterate over each word in the string by calling the split(‘-‘) method.
- Append each word to the res list.
- Print the flattened list using the print() function.
Python3
test_list = [ 'gfg-is-best' , 'for-all' , 'geeks-and' , 'CS' ]
print ( "The original list is : " + str (test_list))
res = []
for string in test_list:
for word in string.split( '-' ):
res.append(word)
print ( "The String List after extension : " + str (res))
|
Output
The original list is : ['gfg-is-best', 'for-all', 'geeks-and', 'CS']
The String List after extension : ['gfg', 'is', 'best', 'for', 'all', 'geeks', 'and', 'CS']
Time complexity: O(n*m), where n is the length of the test_list and m is the maximum number of words in a string.
Auxiliary space: O(n*m), where n is the length of the test_list and m is the maximum number of words in a string, as we need to store all the words in the flattened list.
Method 7: Using reduce(), split(), and operator.concat
In this method, reduce() function, the concat() function is applied to each element of the input list after splitting the string using the split() method. The resulting list of split strings is then flattened into a single list. Then result is printed using the print() function.
Python3
from functools import reduce
import operator
test_list = [ 'gfg-is-best' , 'for-all' , 'geeks-and' , 'CS' ]
print ( "The original list is: " + str (test_list))
res = reduce (operator.concat, [sub.split( '-' ) for sub in test_list])
print ( "The String List after extension: " + str (res))
|
Output
The original list is: ['gfg-is-best', 'for-all', 'geeks-and', 'CS']
The String List after extension: ['gfg', 'is', 'best', 'for', 'all', 'geeks', 'and', 'CS']
Time Complexity: O(n), where n is the total number of characters in all strings in the input list.
Auxiliary Space: O(n), since the output list contains all the characters from the input strings.
Please Login to comment...