问题:我必须将一个元组字符串列表转换为一个正常的元组列表。原因是我想在图像上绘制(x,y)坐标。
我尝试了map
,join
,int()
,float()
的解压缩,但似乎没有任何效果。如果我尝试以最合理的方式使用int()
,则会出现以下错误:
ValueError:以10为底的int()无效文字:'(50,144)'
这是我的元组字符串列表
vertices = ['(50,144)', '(242,144)', '(242,367)', '(50,367)']
type(vertices) >> list
type(vertices[0]) >> str
答案 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'>