Monday, November 25, 2024
Google search engine
HomeLanguagesPython | Convert String to tuple list

Python | Convert String to tuple list

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))


Output : 

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))


Output : 

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


Output

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:

  1. We start by initializing the test string.
  2. We use the split() function to split the string into a list of tokens at every “, “.
  3. We then use a list comprehension to iterate over each token in the list and create a tuple from it.
  4. We use the map() function to apply the int() function to each item in the token, which converts them from strings to integers.
  5. We use replace() to remove the opening and closing parenthesis from each token.
  6. We split each token at every “, ” using split().
  7. We wrap the resulting list of integers in the tuple() function to create a tuple.
  8. We append each tuple to a new list called res.
  9. 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))


Output

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.

RELATED ARTICLES

Most Popular

Recent Comments