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

时间:2019-08-29 14:38:36

标签: python list tuples

问题:我必须将一个元组字符串列表转换为一个正常的元组列表。原因是我想在图像上绘制(x,y)坐标。

我尝试了mapjoinint()float()的解压缩,但似乎没有任何效果。如果我尝试以最合理的方式使用int(),则会出现以下错误:

  

ValueError:以10为底的int()无效文字:'(50,144)'

这是我的元组字符串列表


vertices = ['(50,144)', '(242,144)', '(242,367)', '(50,367)']
type(vertices) >> list
type(vertices[0]) >> str

2 个答案:

答案 0 :(得分:3)

尝试使用ast.literal_eval来安全地分析元组的字符串:

from ast import literal_eval

list(map(literal_eval, vertices))
# [(50, 144), (242, 144), (242, 367), (50, 367)]

答案 1 :(得分:1)

一种安全的方法是自己解析字符串:

verts = [tuple(map(int, s[1:-1].split(','))) for s in vertices]

print(verts)
print(type(verts))
print(type(verts[0]))
print(type(verts[0][0]))

输出:

[(50, 144), (242, 144), (242, 367), (50, 367)]
<class 'list'>
<class 'tuple'>
<class 'int'>

您也可以使用eval,但前提是您对输入的格式(表示整数元组的字符串列表)充满信心:

vertices = ['(50,144)', '(242,144)', '(242,367)', '(50,367)']

verts = [eval(s) for s in vertices]

print(type(verts))
print(type(verts[0]))
print(type(verts[0][0]))

输出:

[(50, 144), (242, 144), (242, 367), (50, 367)]
<class 'list'>
<class 'tuple'>
<class 'int'>