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()fromitertools importgroupby# checking string instancedefstr_check(ele):    returnisinstance(ele, str)# Group contiguous stringsdefgroup_strs(test_list):    # grouping list by cont. strings    forkey, grp ingroupby(test_list, key=str_check):        ifkey:            yieldlist(grp)        else:            yieldfromgrp# 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 loopdefgroup_strs(test_list):    res =[]    temp =[]  forele intest_list:    iftype(ele)==str:            temp.append(ele)        else:    iflen(temp) > 0:                res.append(temp)                temp =[]            res.append(ele)    iflen(temp) > 0:        res.append(temp)    returnres# 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 Listimportitertools# Method to group contiguous stringsdefgroup_strs(test_list):    res =[]    fork, g initertools.groupby(test_list, key=lambdax: isinstance(x, str)):      ifk:            res.append(''.join(list(g)))        else:            res.extend(list(g))                returnres# 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
| defgroup_strs(test_list):    res =[]    temp =''    forele intest_list:        ifisinstance(ele, str):            temp +=ele        else:            iftemp:                res.append(temp)                temp =''            res.append(ele)    iftemp:        res.append(temp)    returnres# 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.
 
				 
					


