如何将字符串转换为元组

4

我想在Python脚本中将以下字符串进行转换:

mystring='(5,650),(235,650),(465,650),(695,650)'

转换成元组列表
mytuple=[(5,650),(235,650),(465,650),(695,650)]

这样,print mytuple[0]产生的结果是:

(5,650)
3个回答

13

我会使用ast.literal_eval:

In [7]: ast.literal_eval('(5,650),(235,650),(465,650),(695,650)')
Out[7]: ((5, 650), (235, 650), (465, 650), (695, 650))

如上所述,这将返回一组元组。如果您想要一个元组列表,只需将list()应用于结果即可。


1

那不是元组,那是列表。

如果你可以确保数据格式与你展示的完全一致,那么你可以尝试像这样将其转换为列表:

mystring2 = mystring.translate(None, "()")
numbers = mystring2.split(",")
out = []
for i in xrange(len(numbers) / 2)
  out.append((int(numbers[2 * i), int(2 * i + 1])))

这个程序可以通过使用更好的列表遍历机制来改进。虽然这应该相当清楚。

如果你真的非常想要一个元组的元组,你可以转换最终的列表:

out2 = tuple(out)

1

使用 eval

mytuple = eval(mystring)

如果你想要一个列表,就把mystring用括号括起来。
mytuble=eval("[%s]" % mystring)

这是最“简单”的解决方案(无需导入,适用于Python 2.5)。 然而,在“防御性”上下文中,ast.literate_eval似乎更为合适。


这将是我的最爱 - 前提是字符串来自安全的来源。否则,也许基于正则表达式的解决方案会很好。 - glglgl
主持人注释: 如果你们想讨论使用 eval 的风险,请在聊天室里进行。因为评论已经变成噪音,所以已被删除。只删除几个评论会导致对话中断。请随意将其移至聊天室,达成共识,然后在此处链接转录。 - Tim Post

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接