Python – Group contiguous strings in List

Given a mixed list, the task is to write a Python program to group all the contiguous strings.
Input : test_list = [5, 6, 'g', 'f', 'g', 6, 5, 'i', 's', 8, 'be', 'st', 9] Output : [5, 6, ['g', 'f', 'g'], 6, 5, ['i', 's'], 8, ['be', 'st'], 9] Explanation : Strings are grouped to form result.
Input : test_list = [5, 6, 6, 5, 'i', 's', 8, 'be', 'st', 9] Output : [5, 6, 6, 5, ['i', 's'], 8, ['be', 'st'], 9] Explanation : Strings are grouped to form result.
Method 1: Using isinstance() + generator + groupby()
In this, we perform the task of identifying strings using isinstance() and str, groupby() is used to group all the strings found by key using isinstance(). The generator way of building a list helps to convert the intermediate results to a list.
Python3
# Python3 code to demonstrate working of# Group contiguous strings in List# Using isinstance() + generator + groupby()from itertools import groupby# checking string instancedef str_check(ele): return isinstance(ele, str)# Group contiguous stringsdef group_strs(test_list): # grouping list by cont. strings for key, grp in groupby(test_list, key=str_check): if key: yield list(grp) else: yield from grp# Initializing listtest_list = [5, 6, 'g', 'f', 'g', 6, 5, 'i', 's', 8, 'be', 'st', 9]# Printing original listprint("The original list is : " + str(test_list))# Calling recursive methodres = [*group_strs(test_list)]# Printing resultprint("List after grouping : " + str(res)) |
The original list is : [5, 6, 'g', 'f', 'g', 6, 5, 'i', 's', 8, 'be', 'st', 9] List after grouping : [5, 6, ['g', 'f', 'g'], 6, 5, ['i', 's'], 8, ['be', 'st'], 9]
Time Complexity: O(n)
Auxiliary Space: O(n)
Method 2: Using type() and simple iteration
- Define a function named group_strs that takes a list test_list as input.
- Initialize an empty list called res.
- Initialize an empty list called temp.
- Use a for loop to iterate over each element ele in test_list.
- Check if the type of ele is str using the type() function.
- If the type of ele is str, append ele to temp.
- If the type of ele is not str, check if the length of temp is greater than 0 using the len() function.
- If the length of temp is greater than 0, append temp to res and reset temp to an empty list.
- Append ele to res.
- If the length of temp is greater than 0 after the loop has finished, append temp to res.
- Return the res list.
- Initialize a list called test_list with a mix of integers and strings.
- Print the original list test_list.
- Call the group_strs() function with test_list as the argument and assign the returned value to res.
- Print the new list res after grouping the strings together.
Example:
Python3
# Using loopdef group_strs(test_list): res = [] temp = [] for ele in test_list: if type(ele)==str: temp.append(ele) else: if len(temp) > 0: res.append(temp) temp = [] res.append(ele) if len(temp) > 0: res.append(temp) return res# initializing listtest_list = [5, 6, 'g', 'f', 'g', 6, 5, 'i', 's', 8, 'be', 'st', 9]# printing original listprint("The original list is : " + str(test_list))# calling recursive function res = group_strs(test_list)# printing resultprint("List after grouping : " + str(res)) |
The original list is : [5, 6, 'g', 'f', 'g', 6, 5, 'i', 's', 8, 'be', 'st', 9] List after grouping : [5, 6, ['g', 'f', 'g'], 6, 5, ['i', 's'], 8, ['be', 'st'], 9]
Time complexity: O(n)
Auxiliary Space: O(n)
Method 3: Using itertools.groupby() function
Python3
# Python3 code to demonstrate working of# Group contiguous strings in Listimport itertools# Method to group contiguous stringsdef group_strs(test_list): res = [] for k, g in itertools.groupby(test_list, key=lambda x: isinstance(x, str)): if k: res.append(''.join(list(g))) else: res.extend(list(g)) return res# Initializing listtest_list = [5, 6, 'g', 'f', 'g', 6, 5, 'i', 's', 8, 'be', 'st', 9]# Printing original listprint("The original list is : " + str(test_list))# Calling the functionres = group_strs(test_list)# Printing list after grouping as resultprint("List after grouping : " + str(res)) |
The original list is : [5, 6, 'g', 'f', 'g', 6, 5, 'i', 's', 8, 'be', 'st', 9] List after grouping : [5, 6, 'gfg', 6, 5, 'is', 8, 'best', 9]
Time complexity: O(n), where n is the length of the input list.
Auxiliary space: O(n), where n is the length of the input list.
Method 4: Using a for loop and conditional statements.
Step-by-step approach:
- Create an empty list called “res” to store the grouped strings.
- Create an empty string called “temp” to store the current group of strings.
- Loop through each element in the “test_list”.
- Check if the element is a string by using the “isinstance()” function.
- If the element is a string, append it to the “temp” string.
- If the element is not a string, append the “temp” string to the “res” list if it is not empty.
- Append the current element to the “res” list.
- If the loop is finished and there are still strings in the “temp” string, append it to the “res” list.
- Return the “res” list.
Python3
def group_strs(test_list): res = [] temp = '' for ele in test_list: if isinstance(ele, str): temp += ele else: if temp: res.append(temp) temp = '' res.append(ele) if temp: res.append(temp) return res# initializing listtest_list = [5, 6, 'g', 'f', 'g', 6, 5, 'i', 's', 8, 'be', 'st', 9]# printing original listprint("The original list is : " + str(test_list))# calling group_strs functionres = group_strs(test_list)# printing resultprint("List after grouping : " + str(res)) |
The original list is : [5, 6, 'g', 'f', 'g', 6, 5, 'i', 's', 8, 'be', 'st', 9] List after grouping : [5, 6, 'gfg', 6, 5, 'is', 8, 'best', 9]
Time complexity: O(n), where n is the length of the “test_list”.
Auxiliary space: O(1), because we are using a constant amount of extra space for the “res” and “temp” variables.



