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
,这也是简短的。