【发布时间】:2011-09-26 12:27:06
【问题描述】:
我喜欢在 Python 脚本中转换以下字符串:
mystring='(5,650),(235,650),(465,650),(695,650)'
到元组列表
mytuple=[(5,650),(235,650),(465,650),(695,650)]
这样
print mytuple[0] 产量:
(5,650)
【问题讨论】:
标签: python configparser
我喜欢在 Python 脚本中转换以下字符串:
mystring='(5,650),(235,650),(465,650),(695,650)'
到元组列表
mytuple=[(5,650),(235,650),(465,650),(695,650)]
这样
print mytuple[0] 产量:
(5,650)
【问题讨论】:
标签: python configparser
我会使用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() 应用于结果即可。
【讨论】:
那不是元组,那是列表。
如果您可以依赖与您显示的格式完全相同的格式,您可能可以通过执行以下操作将其转换为列表:
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)
【讨论】:
使用eval
mytuple = eval(mystring)
如果你想要一个列表用括号括起来 mystring
mytuble=eval("[%s]" % mystring)
这是“最简单”的解决方案(无需导入,使用 Python 2.5)
然而ast.literate_eval 似乎更适合防御 上下文。
【讨论】: