【问题标题】:How to convert a string contain tuple of integers to tuple with integer elements如何将包含整数元组的字符串转换为具有整数元素的元组
【发布时间】:2020-04-29 14:52:54
【问题描述】:

我有这个字符串:

x="(255,255,233...)"

我想把它转换成元组。但是没有任何字符串对象。 但我得到了这样的东西:

x=("255","233")

我尝试使用 for 循环和 isdigit()tuple(), 但它没有给我我想要的。

我希望它是元组中没有“,”或“()”的整数元素的元组。

【问题讨论】:

  • 您可以使用eval(),但如果您不信任输入,这可能会很危险..
  • @MM 你从哪里得到的输入?无论如何,您已经证明您设法获得了一个字符串元组,所以这里剩下的唯一真正的问题(除了关于这种情况的整体问题)是如何将一个元组中的一堆字符串解析为整数.
  • 您好,请问您为什么删除了有关 Pygame 的部分?这与您要解决的问题非常相关。与从文件中解析元组相比,将整数保存到文件或从文件中加载整数是一个更容易、更快、更健壮的问题。
  • 嗨 - Izaak van Dongen,我删除了它,因为问题通过使用 Marcos 答案解决了。我只是认为没有必要进行编辑。如果你问我为什么用元组字符串形式将它保存在文件中,那是因为属性:surface.get_at((x,y)),它以这种方式保存像素的颜色,不幸的是:(

标签: python string list integer tuples


【解决方案1】:

你可以用这个:

x = "(255,255,233...)"
tuples = tuple(int(number) for number in x.replace('(', '').replace(')', '').replace('...', '').split(','))
print(tuples)

>>> (255, 255, 233)

【讨论】:

    【解决方案2】:

    您可以安全地在这样的字符串上使用ast.literal_eval

    import ast
    
    x="(255,255,233)"
    
    ast.literal_eval(x)
    # (255, 255, 233)
    

    【讨论】:

      【解决方案3】:

      您可以在这种情况下使用 ast 库:

      import ast
      
      x = "(255,255,233...)"
      
      data = ast.literal_eval(x.replace(".",""))
      
      print(type(data))
      
      print(type(data[0]))
      
      print(data)
      

      literal_eval() 比使用eval() 更安全。

      唯一需要注意的是,解决方案假定输入字符串中存在句点 "."。您必须知道在输入数据中会遇到的变化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-04
        • 2015-08-02
        • 2016-03-14
        • 1970-01-01
        • 1970-01-01
        • 2018-05-16
        • 2017-02-27
        • 2021-05-15
        相关资源
        最近更新 更多