Sometimes, while working with Python strings, we can have a problem in which we receive a tuple, list in the comma-separated string format, and have to convert to the tuple list. Let’s discuss certain ways in which this task can be performed.
Method #1 : Using loop + split() + replace() This is a brute force method to perform this task. In this, we perform the task of extracting and remaking the tuples to list in a loop using split() and replace() functionalities.
Python3
# Python3 code to demonstrate working of # Convert String to tuple list # using loop + replace() + split() # initializing string test_str = "( 1 , 3 , 4 ), ( 5 , 6 , 4 ), ( 1 , 3 , 6 )" # printing original string print ("The original string is : " + test_str) # Convert String to tuple list # using loop + replace() + split() res = [] temp = [] for token in test_str.split(", "): num = int (token.replace("(", "").replace(")", "")) temp.append(num) if ")" in token: res.append( tuple (temp)) temp = [] # printing result print (" List after conversion from string : " + str (res)) |
The original string is : (1, 3, 4), (5, 6, 4), (1, 3, 6) List after conversion from string : [(1, 3, 4), (5, 6, 4), (1, 3, 6)]
Method #2: Using eval() This inbuilt function can also be used to perform this task. This function internally evaluates the string and returns the converted list of tuples as desired.
Python3
# Python3 code to demonstrate working of # Convert String to tuple list # using eval() # initializing string test_str = "( 1 , 3 , 4 ), ( 5 , 6 , 4 ), ( 1 , 3 , 6 )" # printing original string print ("The original string is : " + test_str) # Convert String to tuple list # using eval() res = list ( eval (test_str)) # printing result print (" List after conversion from string : " + str (res)) |
The original string is : (1, 3, 4), (5, 6, 4), (1, 3, 6) List after conversion from string : [(1, 3, 4), (5, 6, 4), (1, 3, 6)]
Method #3: Using re.findall() and ast.literal_eval()
Another way to convert string to tuple list is by using the findall() function from the re module to find all the tuples and then use the literal_eval() function from the ast module to convert the string into a tuple.
Python3
import re import ast # initializing string test_str = "(1, 3, 4), (5, 6, 4), (1, 3, 6)" # printing original string print ( "The original string is : " + test_str) # Convert String to tuple list # using re.findall() and ast.literal_eval() res = [ast.literal_eval(i) for i in re.findall(r '\(.*?\)' , test_str)] # printing result print ( "List after conversion from string : " + str (res)) #this code is contributed by edula vinay kumar reddy |
The original string is : (1, 3, 4), (5, 6, 4), (1, 3, 6) List after conversion from string : [(1, 3, 4), (5, 6, 4), (1, 3, 6)]
In this method, first, we use the findall() function from the re module to find all the tuples that are present in the given string, it returns a list of tuples in string format. Then we use the literal_eval() function from the ast module to convert those strings into actual tuples. The time complexity of this approach is O(n) where n is the number of tuples present in the string, space complexity is also O(n).
Method #4: Using list comprehension + tuple()
Step-by-step explanation:
- We start by initializing the test string.
- We use the split() function to split the string into a list of tokens at every “, “.
- We then use a list comprehension to iterate over each token in the list and create a tuple from it.
- We use the map() function to apply the int() function to each item in the token, which converts them from strings to integers.
- We use replace() to remove the opening and closing parenthesis from each token.
- We split each token at every “, ” using split().
- We wrap the resulting list of integers in the tuple() function to create a tuple.
- We append each tuple to a new list called res.
- Finally, we print out the result
Python3
# Python3 code to demonstrate working of # Convert String to tuple list # using list comprehension + tuple() # initializing string test_str = "(1, 3, 4), (5, 6, 4), (1, 3, 6)" # printing original string print ( "The original string is : " + test_str) # Convert String to tuple list # using list comprehension + tuple() res = [ tuple ( map ( int , t.replace( '(' , ' ').replace(' ) ', ' ').split(' , '))) for t in test_str.split(' , ')] # printing result print ( "List after conversion from string : " + str (res)) |
The original string is : (1, 3, 4), (5, 6, 4), (1, 3, 6) List after conversion from string : [(1,), (3,), (4,), (5,), (6,), (4,), (1,), (3,), (6,)]
Time complexity: O(n), where n is the number of tokens in the input string.
Auxiliary space: O(n), where n is the number of tokens in the input string. This is because we create a new list of tuples to store the result.