【问题标题】:How to convert a string to tuple如何将字符串转换为元组
【发布时间】: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


    【解决方案1】:

    我会使用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() 应用于结果即可。

    【讨论】:

      【解决方案2】:

      那不是元组,那是列表。

      如果您可以依赖与您显示的格式完全相同的格式,您可能可以通过执行以下操作将其转换为列表:

      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)
      

      【讨论】:

        【解决方案3】:

        使用eval

        mytuple = eval(mystring)
        

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

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

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

        【讨论】:

        • 这将是我最喜欢的 - 只要字符串来自安全来源。否则,也许基于正则表达式的解决方案就可以了。
        • 版主注意: 如果你们想讨论使用 eval 的风险,请在聊天中进行。此答案下的 cmets 已被删除,因为它们已退化为噪声。只删除一些会导致对话中断。随意将其移至聊天,达成解决方案,然后在此处链接到成绩单。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-30
        • 2012-01-19
        • 1970-01-01
        相关资源
        最近更新 更多