Open In App

Python | Convert string tuples to list tuples

Last Updated : 28 Feb, 2023
Comments
Improve
Suggest changes
Like Article
Like
Report

Sometimes, while working with Python we can have a problem in which we have a list of records in form of tuples in stringified form and we desire to convert them to a list of tuples. This kind of problem can have its occurrence in the data science domain. Let's discuss certain ways in which this task can be performed. 

Method 1 (Using eval() + list comprehension): This problem can be easily performed as a one-liner using the inbuilt function of eval(), which performs this task of string to tuple conversion and list comprehension. 

Python3
# Python3 code to demonstrate working of
# Converting string tuples to list tuples
# using list comprehension + eval()

# Initializing list
test_list = ["('gfg', 1)", "('is', 2)", "('best', 3)"]

# printing original list
print("The original list is : " + str(test_list))

# Converting string tuples to list tuples
# using list comprehension + eval()
res = [eval(ele) for ele in test_list]

# printing result
print("The list tuple after conversion : " + str(res))
Output : 
The original list is : ["('gfg', 1)", "('is', 2)", "('best', 3)"]
The list tuple after conversion : [('gfg', 1), ('is', 2), ('best', 3)]

Time complexity: O(n), where n is the length of the input list.
Auxiliary space: O(n), as we are creating a new list with the same length as the input list.

Method 2 (Using eval() + map()): This task can also be performed using a combination of the above functions. The task performed by list comprehension above can be performed using a map() in this method. 

Python3
# Python3 code to demonstrate working of
# Converting string tuples to list tuples
# using map() + eval()

# Initializing list
test_list = ["('gfg', 1)", "('is', 2)", "('best', 3)"]

# printing original list
print("The original list is : " + str(test_list))

# Converting string tuples to list tuples
# using map() + eval()
res = list(map(eval, test_list))

# printing result
print("The list tuple after conversion : " + str(res))
Output : 
The original list is : ["('gfg', 1)", "('is', 2)", "('best', 3)"]
The list tuple after conversion : [('gfg', 1), ('is', 2), ('best', 3)]

Time Complexity: O(n), where n is the number of elements in the input list.
Auxiliary Space: O(n), where n is the number of elements in the input list, for the output list.

Method 3: Using the enumerate function

Python3
s=["('gfg', 1)", "('is', 2)", "('best', 3)"]
x= [eval(i) for a,i in enumerate(s)]
print(x)

Output
[('gfg', 1), ('is', 2), ('best', 3)]

Time complexity: O(n), where n is the length of the list 's'. 
Auxiliary space: O(n), where n is the length of the list 's'. 

Method 4: Using map()+eval()

Python3
s=["('gfg', 1)", "('is', 2)", "('best', 3)"]
x=list(map(eval,s))

print(x)

Output
[('gfg', 1), ('is', 2), ('best', 3)]

The time complexity of the program is O(n), where n is the length of the list "s".
The auxiliary space complexity of the program is also O(n), as the list "x" has to store n elements, where n is the length of the input list "s".

Method#5: Using Regex method.

Python3
# Python3 code to demonstrate working of
# Converting string tuples to list tuples
# Using regex
import re
# Initializing list
test_list = ["('gfg', 1)", "('is', 2)", "('best', 3)"]

# printing original list
print("The original list is : " + str(test_list))

# Converting string tuples to list tuples
# using regex


res = [tuple(map(int, re.findall(r'\d+', i))) if j.isdigit() else (j.strip("(')"), int(k)) for i in test_list for j, k in re.findall(r"\('(.*?)', (.*?)\)", i)]

# printing result
print("The list tuple after conversion : " + str(res))
#this code contributed by tvsk

Output
The original list is : ["('gfg', 1)", "('is', 2)", "('best', 3)"]
The list tuple after conversion : [('gfg', 1), ('is', 2), ('best', 3)]

Time Complexity: O(n)
Auxiliary Space: O(n)

Method 6: (Using ast.literal_eval() instead of eval())

The ast module provides a safer way to evaluate string literals. The ast.literal_eval() function can evaluate a string containing a Python expression or a container object literal and return the corresponding object. It only evaluates literals, so it won't execute arbitrary code like eval().

Python3
import ast

# Initializing list
test_list = ["('gfg', 1)", "('is', 2)", "('best', 3)"]

# printing original list
print("The original list is : " + str(test_list))

# Converting string tuples to list tuples
# using ast.literal_eval() instead of eval()
# ast.literal_eval() is a safer way to evaluate string literals
# it only evaluates literals, so it won't execute arbitrary code like eval()
res = [ast.literal_eval(ele) for ele in test_list]

# printing result
print("The list tuple after conversion : " + str(res))

Output
The original list is : ["('gfg', 1)", "('is', 2)", "('best', 3)"]
The list tuple after conversion : [('gfg', 1), ('is', 2), ('best', 3)]

Time Complexity: O(n)
Auxiliary Space: O(n)


Practice Tags :

Similar Reads

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy