如何将元组列表中的字符串转换为Python元组列表

如何将元组列表中的字符串转换为Python元组列表,python,string,python-3.x,list,tuples,Python,String,Python 3.x,List,Tuples,我有一个保存到字符串中的元组列表(不幸的是)。我正在寻找一种快速有效的方法来将这个字符串转换为实际的元组列表 例如: mylist拻u string='[(40.7822603,-73.9525339),(40.7142,-74.0087),(40.7250027,-73.9413106),(40.703422,-73.9862948),(40.7169963,-74.0149991),(40.7420448,-73.9918131),(40.7287,-73.97979799),(40.775

我有一个保存到字符串中的元组列表(不幸的是)。我正在寻找一种快速有效的方法来将这个字符串转换为实际的元组列表

例如:

mylist拻u string='[(40.7822603,-73.9525339),(40.7142,-74.0087),(40.7250027,-73.9413106),(40.703422,-73.9862948),(40.7169963,-74.0149991),(40.7420448,-73.9918131),(40.7287,-73.97979799),(40.7757237,-73.9492357),(40.7169904,-73.9578252),(40.726103,-73.9780367),(40.7776792,-73.9573737),(40.777676792),(40.677373737373737),(40.67737373737),(40.79,(40.6867687,-73.9743078),(40.6684762,-73.9755826),(40.7169,-73.9578),(40.6996798,-73.9291393),(40.6680182,-73.9809183),(40.7346,-74.0073),(40.6871087,-73.9741862),(40.7160416,-73.9452393),(40.7178984,-74.0063829)]

预期的输出是Python中的元组列表

谢谢

这是一种方式:

import ast

ast.literal_eval(mystr)

# [(40.7822603, -73.9525339),
#  (40.7142, -74.0087),
#  (40.7250027, -73.9413106),
#  (40.703422, -73.9862948),
# ...
#  (40.6871087, -73.9741862),
#  (40.7160416, -73.9452393),
#  (40.7178984, -74.0063829)]
这将评估字符串,就像您在Python中键入它一样

编辑:这是对问题的回答,但不是一个好答案。存在安全风险,它可能不会像您认为的那样发挥作用。因此,不要使用
eval
,请使用:

import ast

ast.literal_eval(mystr)

见[这个问题]详细比较。

ast.literal\u eval
。使用
ast
而不是内置的
eval
函数有什么好处?
ast.literal\u eval
会在输入不是有效的Python数据类型时引发异常。这是一个很好的做法。
eval
通常不是答案。请阅读并获取更多信息n、 @mypetlion的不同之处在于,如果你使用
eval
@mypetlion,你可能会被解雇。关于你关于使用ast over eval的问题,请阅读我可以注意这可能是一个安全问题。如果你没有对你的输入进行消毒,那就是。@Zeus先生,谢谢,这是一个有趣的观点。我刚刚发现这篇文章的标题。例如:
exec(os.system(“sh”))
将打开一个shell。因此,如果您正在为用户和/或可编辑文件(用户可以在没有管理员/sudo权限的情况下编辑的文件)进行任何输入,请小心.
eval
通常不是答案。请阅读并了解更多信息。我不明白为什么
eval
语句仍然是python的一部分。
import ast

ast.literal_eval(mystr)