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)
4

3 回答 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()其应用于结果。

于 2011-09-26T12:30:49.043 回答
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)
于 2011-09-26T12:28:30.387 回答
1

利用eval

mytuple = eval(mystring)

如果你想要一个列表用括号括起来 mystring

mytuble=eval("[%s]" % mystring)

这是“最简单”的解决方案(无需导入,使用 Python 2.5)但是在防御性ast.literate_eval环境中似乎更合适。

于 2011-09-26T12:36:09.397 回答