Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串列表转换为元组_Python_List_Python 2.7_Floating Point_Tuples - Fatal编程技术网

Python 将字符串列表转换为元组

Python 将字符串列表转换为元组,python,list,python-2.7,floating-point,tuples,Python,List,Python 2.7,Floating Point,Tuples,我有以下字符串列表: ['(39.2947500000, -76.6565600000)', '(39.3423900000, -76.5698300000)', '(39.3199500000, -76.6222000000)', '(39.2533200000, -76.6263600000)', '(39.3068100000, -76.6549700000)', '(39.2937500000, -76.6233700000)', '(39.3146700000, -76.6425300

我有以下字符串列表:

['(39.2947500000, -76.6565600000)', '(39.3423900000, -76.5698300000)', '(39.3199500000, -76.6222000000)', '(39.2533200000, -76.6263600000)', '(39.3068100000, -76.6549700000)', '(39.2937500000, -76.6233700000)', '(39.3146700000, -76.6425300000)', '(39.3073300000, -76.6015900000)', '(39.2451900000, -76.6336400000)', '(39.3283000000, -76.5893200000)', '(39.3215400000, -76.6736800000)', '(39.3010000000, -76.5977400000)', '(39.3122600000, -76.6194200000)', '(39.3161400000, -76.5663900000)', '(39.3573500000, -76.6005300000)', '(39.3311200000, -76.6315100000)', '(39.3311200000, -76.6315100000)', '(39.2832900000, -76.5996300000)', '(39.2868200000, -76.6063900000)', '(39.3031200000, -76.6461100000)']
我需要将此字符串转换为元组,以便输出为:

[(39.2947500000, -76.6565600000),(39.3423900000, -76.5698300000)......]
我尝试使用float方法,但它给出了以下错误:

ValueError:无法将字符串转换为浮点:(39.2947500000,-76.6565600000)

提前谢谢

>>> L=['(39.2947500000, -76.6565600000)', '(39.3423900000, -76.5698300000)', '(39.3199500000, -76.6222000000)', '(39.2533200000, -76.6263600000)', '(39.3068100000, -76.6549700000)', '(39.2937500000, -76.6233700000)', '(39.3146700000, -76.6425300000)', '(39.3073300000, -76.6015900000)', '(39.2451900000, -76.6336400000)', '(39.3283000000, -76.5893200000)', '(39.3215400000, -76.6736800000)', '(39.3010000000, -76.5977400000)', '(39.3122600000, -76.6194200000)', '(39.3161400000, -76.5663900000)', '(39.3573500000, -76.6005300000)', '(39.3311200000, -76.6315100000)', '(39.3311200000, -76.6315100000)', '(39.2832900000, -76.5996300000)', '(39.2868200000, -76.6063900000)', '(39.3031200000, -76.6461100000)']
>>> import ast
>>> list(map(lambda x:ast.literal_eval(x), L))
[(39.29475, -76.65656), (39.34239, -76.56983), (39.31995, -76.6222), (39.25332, -76.62636), (39.30681, -76.65497), (39.29375, -76.62337), (39.31467, -76.64253), (39.30733, -76.60159), (39.24519, -76.63364), (39.3283, -76.58932), (39.32154, -76.67368), (39.301, -76.59774), (39.31226, -76.61942), (39.31614, -76.56639), (39.35735, -76.60053), (39.33112, -76.63151), (39.33112, -76.63151), (39.28329, -76.59963), (39.28682, -76.60639), (39.30312, -76.64611)]
对于Python2.x:
map(lambda x:ast.literal\u eval(x,L)

编辑:一些解释:

ast
代表抽象语法树
literal\u eval()
eval()
安全得多

引用官方文件:

ast.literal_eval(节点或字符串)安全地计算表达式节点或 一个Unicode或Latin-1编码的字符串,包含Python文本或 容器显示。提供的字符串或节点只能由 以下Python文本结构:字符串、数字、元组、列表、, 口授、布尔语和无语

这可以用于安全地评估包含Python的字符串 来自不受信任源的值,无需解析这些值 自己它不能计算任意复杂的参数 表达式,例如涉及运算符或索引的表达式

对于Python2.x:
map(lambda x:ast.literal\u eval(x,L)

编辑:一些解释:

ast
代表抽象语法树
literal\u eval()
eval()
安全得多

引用官方文件:

ast.literal_eval(节点或字符串)安全地计算表达式节点或 一个Unicode或Latin-1编码的字符串,包含Python文本或 容器显示。提供的字符串或节点只能由 以下Python文本结构:字符串、数字、元组、列表、, 口授、布尔语和无语

这可以用于安全地评估包含Python的字符串 来自不受信任源的值,无需解析这些值 自己它不能计算任意复杂的参数 表达式,例如涉及运算符或索引的表达式


您可以使用
eval

a = ['(39.2947500000, -76.6565600000)', '(39.3423900000, -76.5698300000)', '(39.3199500000, -76.6222000000)', '(39.2533200000, -76.6263600000)', '(39.3068100000, -76.6549700000)', '(39.2937500000, -76.6233700000)', '(39.3146700000, -76.6425300000)', '(39.3073300000, -76.6015900000)', '(39.2451900000, -76.6336400000)', '(39.3283000000, -76.5893200000)', '(39.3215400000, -76.6736800000)', '(39.3010000000, -76.5977400000)', '(39.3122600000, -76.6194200000)', '(39.3161400000, -76.5663900000)', '(39.3573500000, -76.6005300000)', '(39.3311200000, -76.6315100000)', '(39.3311200000, -76.6315100000)', '(39.2832900000, -76.5996300000)', '(39.2868200000, -76.6063900000)', '(39.3031200000, -76.6461100000)'] 
b = [ eval(x) for x in a ]

您可以使用
eval

a = ['(39.2947500000, -76.6565600000)', '(39.3423900000, -76.5698300000)', '(39.3199500000, -76.6222000000)', '(39.2533200000, -76.6263600000)', '(39.3068100000, -76.6549700000)', '(39.2937500000, -76.6233700000)', '(39.3146700000, -76.6425300000)', '(39.3073300000, -76.6015900000)', '(39.2451900000, -76.6336400000)', '(39.3283000000, -76.5893200000)', '(39.3215400000, -76.6736800000)', '(39.3010000000, -76.5977400000)', '(39.3122600000, -76.6194200000)', '(39.3161400000, -76.5663900000)', '(39.3573500000, -76.6005300000)', '(39.3311200000, -76.6315100000)', '(39.3311200000, -76.6315100000)', '(39.2832900000, -76.5996300000)', '(39.2868200000, -76.6063900000)', '(39.3031200000, -76.6461100000)'] 
b = [ eval(x) for x in a ]
此解决方案不使用eval(我不喜欢使用eval),它迭代字符串,在“,”上拆分它们,对它们进行子串以删除“(“,”和“)”,然后将它们强制转换为浮点


此解决方案不使用eval(我不喜欢使用eval),它迭代字符串,在“,”上拆分它们,对它们进行子串以删除“(“,”和“)”,然后将它们强制转换为浮点值(如果您希望避免
import
s,并且感觉
为了清晰起见,这可能是避免列表理解的地方*:

lst = ['(39.2947500000, -76.6565600000)', '(39.3423900000, -76.5698300000)', '(39.3199500000, -76.6222000000)', '(39.2533200000, -76.6263600000)', '(39.3068100000, -76.6549700000)', '(39.2937500000, -76.6233700000)', '(39.3146700000, -76.6425300000)', '(39.3073300000, -76.6015900000)', '(39.2451900000, -76.6336400000)', '(39.3283000000, -76.5893200000)', '(39.3215400000, -76.6736800000)', '(39.3010000000, -76.5977400000)', '(39.3122600000, -76.6194200000)', '(39.3161400000, -76.5663900000)', '(39.3573500000, -76.6005300000)', '(39.3311200000, -76.6315100000)', '(39.3311200000, -76.6315100000)', '(39.2832900000, -76.5996300000)', '(39.2868200000, -76.6063900000)', '(39.3031200000, -76.6461100000)']

out = list()
for i in lst:
    j,k = i.split(",")
    out.append(tuple((float(j[1:]), float(k[:-1]))))
print(out)



*如果您希望避免导入
并且您觉得
为了清晰起见,这可能是避免列表理解的地方*:

lst = ['(39.2947500000, -76.6565600000)', '(39.3423900000, -76.5698300000)', '(39.3199500000, -76.6222000000)', '(39.2533200000, -76.6263600000)', '(39.3068100000, -76.6549700000)', '(39.2937500000, -76.6233700000)', '(39.3146700000, -76.6425300000)', '(39.3073300000, -76.6015900000)', '(39.2451900000, -76.6336400000)', '(39.3283000000, -76.5893200000)', '(39.3215400000, -76.6736800000)', '(39.3010000000, -76.5977400000)', '(39.3122600000, -76.6194200000)', '(39.3161400000, -76.5663900000)', '(39.3573500000, -76.6005300000)', '(39.3311200000, -76.6315100000)', '(39.3311200000, -76.6315100000)', '(39.2832900000, -76.5996300000)', '(39.2868200000, -76.6063900000)', '(39.3031200000, -76.6461100000)']

out = list()
for i in lst:
    j,k = i.split(",")
    out.append(tuple((float(j[1:]), float(k[:-1]))))
print(out)



*请参见

即使它使用了危险的
eval
,这也是简短的。即使它使用了危险的
eval
,这也是简短的。