【问题标题】:Is there way to convert 1 element of string to multiple as desired有没有办法根据需要将字符串的 1 个元素转换为多个
【发布时间】:2020-08-20 17:15:34
【问题描述】:

https://code.sololearn.com/cRcr0h9XTJt0/?ref=app

     arr =["(2,2),(2,2),(2,2),(2,2)"]
     print(len(arr))
     outputrequired = []
     outputrequired = [[2,2],[2,2],[2,2],[2,2]]
     print(len(outputrequired)
  1. 这里我需要将“arr”转换为“outputrequired”

【问题讨论】:

    标签: python-3.x list tuples


    【解决方案1】:

    您的arr 是一个只有一个元素的列表:一个字符串。使用eval() 解析这似乎是一个不错的选择,但要安全地解析它,您应该使用ast.literal_eval

    现在,如果我们这样做:

    from ast import literal_eval
    
    arr = ["(2,2),(2,2),(2,2),(2,2)"]
    evaluated = literal_eval(arr)
    print(evaluated)
    

    ...我们得到一个错误:

    ValueError: malformed node or string: ['(2,2),(2,2),(2,2),(2,2)']
    

    arr 不是字符串,但将arr 转换为字符串并将其传递给literal_eval 可以,但它什么也没做,只是返回相同的arr

    我们需要做的是将arr 的第一个(并且仅在这种情况下)元素转换为元组列表,而不是当前的字符串。

    所以我们将arr[0] 传递给literal_eval,它会返回:

    from ast import literal_eval
    
    arr = ["(2,2),(2,2),(2,2),(2,2)"]
    evaluated = literal_eval(arr[0])
    print(evaluated)
    
    ((2, 2), (2, 2), (2, 2), (2, 2))
    

    一个tuple 的元组。我们越来越近了。要将元组转换为字符串,我们只需这样做:

    list(tuple)
    

    我们的元组列表存储在变量evaluated 中,因此要将其转换为列表,我们这样做:

    list(evaluated)
    

    ...返回这个:

    [(2, 2), (2, 2), (2, 2), (2, 2)]
    

    更近了。要将evaluated 中的元组转换为列表,我们可以使用列表推导:

    outputrequired = [list(t) for t in evaluated]
    

    这基本上翻译为:

    outputrequired = []
    for t in evaluated:
        outputrequired.append(list(t))
    

    这只是一种更有效的方式。

    无论如何,这是outputrequired 的结果:

    [[2, 2], [2, 2], [2, 2], [2, 2]]
    

    列表列表。

    完整代码:

    from ast import literal_eval
    
    arr = ["(2,2),(2,2),(2,2),(2,2)"]
    
    evaluated = literal_eval(arr[0])
    evaluated = list(evaluated)
    
    outputrequired = [list(t) for t in evaluated]
    
    print(outputrequired)
    

    Run and edit this code online

    【讨论】:

      猜你喜欢
      • 2023-01-30
      • 2013-12-30
      • 2020-07-14
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多